--- /dev/null
+package := libffi
+$(package)_version := 3.4.2
+$(package)_download_path := https://github.com/libffi/$(package)/releases/download/v$($(package)_version)
+$(package)_file_name := libffi-$($(package)_version).tar.gz
+$(package)_sha256_hash := 540fb721619a6aba3bdeef7d940d8e9e0e6d2c193595bc243241b77ff9e93620
+
+define $(package)_set_vars
+ $(package)_config_opts := --enable-option-checking --disable-dependency-tracking
+ $(package)_config_opts += --disable-shared --enable-static --disable-docs
+ $(package)_config_opts += --disable-multi-os-directory
+endef
+
+define $(package)_config_cmds
+ $($(package)_autoconf)
+endef
+
+define $(package)_build_cmds
+ $(MAKE)
+endef
+
+define $(package)_stage_cmds
+ $(MAKE) DESTDIR=$($(package)_staging_dir) install
+endef
+
+define $(package)_postprocess_cmds
+ rm -rf share
+endef
endef
define $(package)_config_cmds
- meson setup --cross-file toolchain.txt build
+ meson setup --cross-file toolchain.txt build -Dxkb-config-root=/usr/share/X11/xkb -Dxkb-config-extra-path=/app/share/X11/xkb
endef
define $(package)_build_cmds
--- /dev/null
+package=native_expat
+$(package)_version=2.6.3
+$(package)_download_path=https://github.com/libexpat/libexpat/releases/download/R_$(subst .,_,$($(package)_version))/
+$(package)_file_name=expat-$($(package)_version).tar.gz
+$(package)_sha256_hash=17aa6cfc5c4c219c09287abfc10bc13f0c06f30bb654b28bfe6f567ca646eb79
+$(package)_build_subdir=build
+
+define $(package)_set_vars
+ $(package)_config_opts := -DEXPAT_BUILD_TOOLS=OFF
+ $(package)_config_opts += -DEXPAT_BUILD_EXAMPLES=OFF
+ $(package)_config_opts += -DEXPAT_BUILD_TESTS=OFF
+ $(package)_config_opts += -DBUILD_SHARED_LIBS=OFF
+ $(package)_config_opts += -DCMAKE_POSITION_INDEPENDENT_CODE=ON
+endef
+
+define $(package)_config_cmds
+ $($(package)_cmake) -S .. -B .
+endef
+
+define $(package)_build_cmds
+ $(MAKE)
+endef
+
+define $(package)_stage_cmds
+ $(MAKE) DESTDIR=$($(package)_staging_dir) install
+endef
+
+define $(package)_postprocess_cmds
+ rm -rf share lib/cmake
+endef
--- /dev/null
+package := native_libffi
+$(package)_version := 3.4.2
+$(package)_download_path := https://github.com/libffi/$(package)/releases/download/v$($(package)_version)
+$(package)_file_name := libffi-$($(package)_version).tar.gz
+$(package)_sha256_hash := 540fb721619a6aba3bdeef7d940d8e9e0e6d2c193595bc243241b77ff9e93620
+
+define $(package)_set_vars
+ $(package)_config_opts := --enable-option-checking --disable-dependency-tracking
+ $(package)_config_opts += --enable-shared --disable-static --disable-docs
+ $(package)_config_opts += --disable-multi-os-directory
+endef
+
+define $(package)_config_cmds
+ $($(package)_autoconf)
+endef
+
+define $(package)_build_cmds
+ $(MAKE)
+endef
+
+define $(package)_stage_cmds
+ $(MAKE) DESTDIR=$($(package)_staging_dir) install
+endef
+
+define $(package)_postprocess_cmds
+ rm -rf share
+endef
$(package)_suffix=everywhere-src-$($(package)_version).tar.xz
$(package)_file_name=qtbase-$($(package)_suffix)
$(package)_sha256_hash=1bad481710aa27f872de6c9f72651f89a6107f0077003d0ebfcc9fd15cba3c75
+$(package)_linux_dependencies=native_wayland
$(package)_qt_libs=corelib network widgets gui plugins testlib
$(package)_patches = dont_hardcode_pwd.patch
$(package)_patches += fast_fixed_dtoa_no_optimize.patch
$(package)_qtshadertools_file_name=qtshadertools-$($(package)_suffix)
$(package)_qtshadertools_sha256_hash=44692dc93482374bf3b39e96c881fa08275f0bf82958b68a7e3c796b76d4c4cb
+$(package)_qtwayland_file_name=qtwayland-$($(package)_suffix)
+$(package)_qtwayland_sha256_hash=175758591638ebf1c6fbb66ac11c7fa0eb8d4ed52e9243cc59075d06a6a2060a
+
$(package)_extra_sources += $($(package)_qttools_file_name)
$(package)_extra_sources += $($(package)_qtsvg_file_name)
$(package)_extra_sources += $($(package)_qtmultimedia_file_name)
$(package)_extra_sources += $($(package)_qtshadertools_file_name)
+$(package)_extra_sources += $($(package)_qtwayland_file_name)
define $(package)_set_vars
$(package)_config_opts_release = -release
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttools_file_name),$($(package)_qttools_file_name),$($(package)_qttools_sha256_hash)) && \
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtsvg_file_name),$($(package)_qtsvg_file_name),$($(package)_qtsvg_sha256_hash)) && \
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtmultimedia_file_name),$($(package)_qtmultimedia_file_name),$($(package)_qtmultimedia_sha256_hash)) && \
-$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtshadertools_file_name),$($(package)_qtshadertools_file_name),$($(package)_qtshadertools_sha256_hash))
+$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtshadertools_file_name),$($(package)_qtshadertools_file_name),$($(package)_qtshadertools_sha256_hash)) && \
+$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtwayland_file_name),$($(package)_qtwayland_file_name),$($(package)_qtwayland_sha256_hash))
endef
define $(package)_extract_cmds
echo "$($(package)_qtsvg_sha256_hash) $($(package)_source_dir)/$($(package)_qtsvg_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
echo "$($(package)_qtmultimedia_sha256_hash) $($(package)_source_dir)/$($(package)_qtmultimedia_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
echo "$($(package)_qtshadertools_sha256_hash) $($(package)_source_dir)/$($(package)_qtshadertools_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
+ echo "$($(package)_qtwayland_sha256_hash) $($(package)_source_dir)/$($(package)_qtwayland_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
$(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \
mkdir qtbase && \
$(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source) -C qtbase && \
mkdir qtmultimedia && \
$(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtmultimedia_file_name) -C qtmultimedia && \
mkdir qtshadertools && \
- $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtshadertools_file_name) -C qtshadertools
+ $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtshadertools_file_name) -C qtshadertools && \
+ mkdir qtwayland && \
+ $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtwayland_file_name) -C qtwayland
endef
define $(package)_preprocess_cmds
--- /dev/null
+package := native_wayland
+$(package)_version := 1.23.1
+$(package)_download_path := https://gitlab.freedesktop.org/wayland/wayland/-/releases/$($(package)_version)/downloads/
+$(package)_file_name := wayland-$($(package)_version).tar.xz
+$(package)_sha256_hash := 864fb2a8399e2d0ec39d56e9d9b753c093775beadc6022ce81f441929a81e5ed
+$(package)_dependencies := native_expat native_libffi
+
+define $(package)_config_cmds
+ meson setup build -Dprefix="$(build_prefix)" -Ddtd_validation=false -Ddocumentation=false -Dtests=false
+endef
+
+define $(package)_build_cmds
+ ninja -C build
+endef
+
+define $(package)_stage_cmds
+ DESTDIR=$($(package)_staging_dir) ninja -C build install
+endef
packages := boost openssl unbound qrencode libsodium polyseed hidapi abseil protobuf libusb zlib libgpg-error libgcrypt expat libzip zxing-cpp
native_packages := native_qt native_abseil native_protobuf
-linux_packages := eudev libfuse libsquashfuse zstd appimage_runtime
-linux_native_packages =
+linux_packages := eudev libfuse libsquashfuse zstd appimage_runtime wayland libffi
+linux_native_packages := native_expat native_libffi native_wayland
x86_64_linux_packages := flatstart
$(package)_sha256_hash=1bad481710aa27f872de6c9f72651f89a6107f0077003d0ebfcc9fd15cba3c75
$(package)_darwin_dependencies=openssl native_qt
$(package)_mingw32_dependencies=openssl native_qt
-$(package)_linux_dependencies=openssl native_qt freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm libxcb_util_cursor dbus
+$(package)_linux_dependencies=openssl native_qt freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm libxcb_util_cursor dbus wayland native_wayland
$(package)_patches += fast_fixed_dtoa_no_optimize.patch
$(package)_patches += guix_cross_lib_path.patch
$(package)_patches += qtbase-moc-ignore-gcc-macro.patch
$(package)_qtshadertools_file_name=qtshadertools-$($(package)_suffix)
$(package)_qtshadertools_sha256_hash=44692dc93482374bf3b39e96c881fa08275f0bf82958b68a7e3c796b76d4c4cb
+$(package)_qtwayland_file_name=qtwayland-$($(package)_suffix)
+$(package)_qtwayland_sha256_hash=175758591638ebf1c6fbb66ac11c7fa0eb8d4ed52e9243cc59075d06a6a2060a
+
$(package)_extra_sources += $($(package)_qttools_file_name)
$(package)_extra_sources += $($(package)_qtsvg_file_name)
$(package)_extra_sources += $($(package)_qtwebsockets_file_name)
$(package)_extra_sources += $($(package)_qtmultimedia_file_name)
$(package)_extra_sources += $($(package)_qtshadertools_file_name)
+$(package)_extra_sources += $($(package)_qtwayland_file_name)
define $(package)_set_vars
$(package)_config_opts += -DQT_HOST_PATH=$(build_prefix)/qt-host
$(package)_config_opts_linux += -DQT_FEATURE_backtrace=OFF
$(package)_config_opts_linux += -DQT_FEATURE_dbus=ON
$(package)_config_opts_linux += -DQT_FEATURE_dbus_linked=ON
+$(package)_config_opts_linux += -DQT_FEATURE_wayland_client=ON
+$(package)_config_opts_linux += -DQT_FEATURE_wayland_server=OFF
+$(package)_config_opts_linux += -DQT_FEATURE_wayland_drm_egl_server_buffer=OFF
+$(package)_config_opts_linux += -DQT_FEATURE_wayland-shm-emulation-server-buffer=OFF
+$(package)_config_opts_linux += -DQT_FEATURE_wayland-client-fullscreen-shell-v1=OFF
+$(package)_config_opts_linux += -DQT_FEATURE_wayland-client-ivi-shell=OFF
+$(package)_config_opts_linux += -DQT_FEATURE_wayland-client-wl-shell=OFF
+$(package)_config_opts_linux += -DQT_FEATURE_wayland-client-xdg-shell-v5=OFF
+$(package)_config_opts_linux += -DQT_FEATURE_wayland-client-xdg-shell-v6=OFF
$(package)_config_opts_linux += -DBUILD_WITH_PCH=OFF
$(package)_config_opts_mingw32 += -DQT_QMAKE_TARGET_MKSPEC=win32-g++
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtsvg_file_name),$($(package)_qtsvg_file_name),$($(package)_qtsvg_sha256_hash)) && \
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtwebsockets_file_name),$($(package)_qtwebsockets_file_name),$($(package)_qtwebsockets_sha256_hash)) && \
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtmultimedia_file_name),$($(package)_qtmultimedia_file_name),$($(package)_qtmultimedia_sha256_hash)) && \
-$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtshadertools_file_name),$($(package)_qtshadertools_file_name),$($(package)_qtshadertools_sha256_hash))
+$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtshadertools_file_name),$($(package)_qtshadertools_file_name),$($(package)_qtshadertools_sha256_hash)) && \
+$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtwayland_file_name),$($(package)_qtwayland_file_name),$($(package)_qtwayland_sha256_hash))
endef
define $(package)_extract_cmds
echo "$($(package)_qtwebsockets_sha256_hash) $($(package)_source_dir)/$($(package)_qtwebsockets_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
echo "$($(package)_qtmultimedia_sha256_hash) $($(package)_source_dir)/$($(package)_qtmultimedia_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
echo "$($(package)_qtshadertools_sha256_hash) $($(package)_source_dir)/$($(package)_qtshadertools_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
+ echo "$($(package)_qtwayland_sha256_hash) $($(package)_source_dir)/$($(package)_qtwayland_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \
$(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \
mkdir qtbase && \
$(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source) -C qtbase && \
mkdir qtmultimedia && \
$(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtmultimedia_file_name) -C qtmultimedia && \
mkdir qtshadertools && \
- $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtshadertools_file_name) -C qtshadertools
+ $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtshadertools_file_name) -C qtshadertools && \
+ mkdir qtwayland && \
+ $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtwayland_file_name) -C qtwayland
endef
define $(package)_preprocess_cmds
--- /dev/null
+package := wayland
+$(package)_version := 1.23.1
+$(package)_download_path := https://gitlab.freedesktop.org/wayland/wayland/-/releases/$($(package)_version)/downloads/
+$(package)_file_name := wayland-$($(package)_version).tar.xz
+$(package)_sha256_hash := 864fb2a8399e2d0ec39d56e9d9b753c093775beadc6022ce81f441929a81e5ed
+$(package)_dependencies=native_wayland libffi expat
+$(package)_patches = toolchain.txt
+
+define $(package)_preprocess_cmds
+ cp $($(package)_patch_dir)/toolchain.txt toolchain.txt && \
+ sed -i -e 's|@host_prefix@|$(host_prefix)|' \
+ -e 's|@build_prefix@|$(build_prefix)|' \
+ -e 's|@cc@|$($(package)_cc)|' \
+ -e 's|@cxx@|$($(package)_cxx)|' \
+ -e 's|@ar@|$($(package)_ar)|' \
+ -e 's|@strip@|$(host_STRIP)|' \
+ -e 's|@arch@|$(host_arch)|' \
+ toolchain.txt
+endef
+
+define $(package)_config_cmds
+ PKG_CONFIG_LIBDIR="$(host_prefix)/lib/pkgconfig:$(build_prefix)/lib/pkgconfig" PKG_CONFIG_PATH="$(build_prefix)/lib/pkgconfig" meson setup --cross-file toolchain.txt build -Ddtd_validation=false -Ddocumentation=false -Dprefer_static=true -Ddefault_library=static -Dtests=false -Dscanner=false
+endef
+
+define $(package)_build_cmds
+ ninja -C build
+endef
+
+define $(package)_stage_cmds
+ DESTDIR=$($(package)_staging_dir) ninja -C build install
+endef
set(QT_NO_CREATE_TARGETS TRUE)
set(QT_SUPERBUILD TRUE)
-set(QT_BUILD_SUBMODULES "qtbase;qtsvg;qtshadertools;qtmultimedia" CACHE STRING "Submodules to build")
+set(QT_BUILD_SUBMODULES "qtbase;qtsvg;qtshadertools;qtmultimedia;qtwayland" CACHE STRING "Submodules to build")
foreach(module IN LISTS QT_BUILD_SUBMODULES)
message(NOTICE "Configuring '${module}'")
--- /dev/null
+[binaries]
+c = '@cc@'
+cpp = '@cxx@'
+ar = '@ar@'
+strip = '@strip@'
+pkgconfig = '/home/user/.guix-profile/bin/pkg-config'
+
+[host_machine]
+system = 'linux'
+cpu_family = '@arch@'
+cpu = '@arch@'
+endian = 'little'
+
+[project options]
+tests = false
+documentation = false
+dtd_validation = false
+
+[built-in options]
+prefix = '@build_prefix@'
set(QT_NO_CREATE_TARGETS TRUE)
set(QT_SUPERBUILD TRUE)
-set(QT_BUILD_SUBMODULES "qtbase;qtsvg;qtwebsockets;qtshadertools;qtmultimedia" CACHE STRING "Submodules to build")
+set(QT_BUILD_SUBMODULES "qtbase;qtsvg;qtwebsockets;qtshadertools;qtmultimedia;qtwayland" CACHE STRING "Submodules to build")
foreach(module IN LISTS QT_BUILD_SUBMODULES)
message(NOTICE "Configuring '${module}'")
--- /dev/null
+[binaries]
+c = '@cc@'
+cpp = '@cxx@'
+ar = '@ar@'
+strip = '@strip@'
+pkgconfig = '/home/user/.guix-profile/bin/pkg-config'
+
+[host_machine]
+system = 'linux'
+cpu_family = '@arch@'
+cpu = '@arch@'
+endian = 'little'
+
+[built-in options]
+prefix = '@host_prefix@'
cp /feather/contrib/depends/x86_64-linux-gnu/bin/startup .
# Copy feather binary
-cp /feather-bin feather
+cp /outdir/feather feather
# Copy metadata
cp -r /feather/contrib/flatpak/share .
GUIX_GLIBC=$(get_store_path "glibc")
GUIX_FONTCONFIG=$(get_store_path "fontconfig")
GUIX_GCC=$(get_store_path "gcc")
+GUIX_KEYBOARD_CONFIG=$(get_store_path "keyboard-config")
# Patch Feather binary
patchelf --set-interpreter "/${GUIX_GLIBC}/lib/ld-linux-x86-64.so.2" feather
ln -s "/${GUIX_PROFILE}/share/locale" share/locale
ln -s "/${GUIX_PROFILE}/share/xml" share/xml
+ln -s "/${GUIX_KEYBOARD_CONFIG}/share/X11" share/X11
+
# Setup profile symlink
ln -s "/${GUIX_PROFILE}" profile
case "$OPTIONS" in
pack)
- FEATHER_BIN="$(outdir_for_host "$host")/feather"
+ OUTDIR="$(outdir_for_host "$host")"
export VERSION=${VERSION}
time-machine pack -S /profile=. --manifest="${PWD}/contrib/guix/pack.scm"
PACK=$(time-machine pack --manifest="${PWD}/contrib/guix/pack.scm")
--share="$PACK"=/pack \
--share="$(outdir_for_host "$host")"=/output \
--share="$LOGDIR_BASE"=/logdir-base \
- --share="$FEATHER_BIN"=/feather-bin \
+ --share="$OUTDIR"=/outdir \
--keep-failed \
--fallback \
--user="user" \
(guix download)
((guix licenses) #:prefix license:)
(guix packages)
- (guix utils))
+ (guix utils)
+ (gnu packages xorg)
+ )
(define utf8-locales
(make-glibc-utf8-locales
(append
(list nss-certs
fontconfig
- utf8-locales)))
\ No newline at end of file
+ utf8-locales
+ xkeyboard-config)))
MultimediaWidgets)
endif()
+IF (UNIX AND NOT APPLE)
+ list(APPEND QT_COMPONENTS WaylandClient)
+endif()
+
find_package(Qt6 REQUIRED COMPONENTS ${QT_COMPONENTS})
if (CHECK_UPDATES)
)
endif()
+if(UNIX AND NOT APPLE)
+ target_link_libraries(feather PRIVATE Qt::WaylandClient)
+endif()
+
if(STATIC AND APPLE)
target_link_libraries(feather PRIVATE Qt6::QDarwinCameraPermissionPlugin)
endif()
if(STATIC AND UNIX AND NOT APPLE)
target_link_libraries(feather PRIVATE Qt6::QComposePlatformInputContextPlugin)
+ target_link_libraries(feather PRIVATE Qt6::QWaylandIntegrationPlugin)
endif()
if(DEPENDS AND UNIX AND NOT APPLE)
find_library(LIBXAU_LIBRARY Xau REQUIRED)
message(STATUS "libXau: libraries at ${LIBXAU_LIBRARY}")
target_link_libraries(XCB::XCB INTERFACE ${LIBXAU_LIBRARY})
+
+ # make sure Wayland::Client links to libffi
+ find_library(LIBFFI_LIBRARY ffi REQUIRED)
+ message(STATUS "libffi: libraries at ${LIBFFI_LIBRARY}")
+ target_link_libraries(Wayland::Client INTERFACE ${LIBFFI_LIBRARY})
endif()
if(STACK_TRACE AND CMAKE_C_COMPILER_ID STREQUAL "GNU")
file(COPY "${CMAKE_SOURCE_DIR}/src/assets/images/appicons/appicon.icns" DESTINATION "${CMAKE_SOURCE_DIR}/installed/feather.app/Contents/Resources/" )
endif()
-qt_finalize_executable(feather)
\ No newline at end of file
+qt_finalize_executable(feather)
#if defined(Q_OS_LINUX) && defined(STATIC)
Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)
Q_IMPORT_PLUGIN(QComposePlatformInputContextPlugin) // Needed for dead keys on Linux
+Q_IMPORT_PLUGIN(QWaylandIntegrationPlugin)
+Q_IMPORT_PLUGIN(QWaylandXdgShellIntegrationPlugin)
+Q_IMPORT_PLUGIN(QWaylandBradientDecorationPlugin)
#endif
#if defined(Q_OS_MAC) && defined(STATIC)