(define-module (packages komodo qaterial) #:use-module (gnu packages qt) #:use-module (packages komodo googlefontcmake) #:use-module (guix build utils) #:use-module (guix build-system copy) #:use-module (guix build-system cmake) #:use-module (guix download) #:use-module (guix gexp) #:use-module (guix git-download) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (packages komodo qolm) #:use-module (packages komodo qtgeneratorcmake)) ;; DATA LAYER (define cmake-fetchgooglefontcmake "cmake/FetchGoogleFontCMake.cmake") (define cmakelists-fonts "qml/Qaterial/Fonts/CMakeLists.txt") (define cmakelists-icons "qml/Qaterial/Icons/CMakeLists.txt") (define cmakelists-root "CMakeLists.txt") (define description "A collection of Material Components to build faster UI using Qml.") (define disable-icons "set(QATERIAL_ENABLE_ICONS OFF") (define disable-lato "set(QATERIAL_ENABLE_LATO OFF") (define disable-roboto "set(QATERIAL_ENABLE_ROBOTO OFF") (define disable-robotomono "set(QATERIAL_ENABLE_ROBOTOMONO OFF") (define enable-build-shared "set(QATERIAL_BUILD_SHARED ON") (define fetcher-fonts "include\\(\\$\\{PROJECT_SOURCE_DIR\\}\\/cmake\\/FetchGoogleFontCMake.cmake\\)") (define fetcher-qolm "include\\(cmake\\/FetchQOlm.cmake\\)") (define file-generateqrc "cmake/GenerateQrc.cmake") (define fetcher-qtgeneratorcmake "include\\(cmake\\/FetchQtGeneratorCMake.cmake\\)") (define hash (base32 "19xvgk4h908x0zgxy63fqmrsb5df613vhr5h7cpsgg7nllglypss")) (define hook-enable-icons "set\\(QATERIAL_ENABLE_ICONS ON") (define hook-qaterial-generate-icons-class "qaterial_generate_icons_class\\(\\$\\{QATERIAL_ICONS_CLASS_FILE\\} \\$\\{QATERIAL_ICONS_SRC_FILE\\}\\)") (define head-hook "include\\(cmake\\/Version.cmake\\)") (define home-page "https://olivierldff.github.io/Qaterial") (define hook-icons "include\\(\\$\\{PROJECT_SOURCE_DIR\\}\\/cmake\\/FetchMaterialDesignIcons.cmake\\)") (define name "qaterial") (define null-string "") (define setter-build-shared "set\\(QATERIAL_BUILD_SHARED OFF") (define setter-lato "set\\(QATERIAL_ENABLE_LATO ON") (define setter-roboto "set\\(QATERIAL_ENABLE_ROBOTO ON") (define setter-robotomono "set\\(QATERIAL_ENABLE_ROBOTOMONO ON") (define synopsis "🧩 Collection of Material Components based on QtQuickControls2.") (define url "https://github.com/OlivierLDff/Qaterial.git") (define version "v1.4.9") ;; ABSTRACTION LAYER -4 (define link-qtgeneratorcmake '(string-append "include(cmake/Version.cmake)\n" "include(" path-qtgeneratorcmake "/cmake/GenerateQrc.cmake" ")\n" "include(" path-qtgeneratorcmake "/cmake/GenerateQmldir.cmake" ")\n" "include(" path-qtgeneratorcmake "/cmake/GenerateQrcAliasQtObject.cmake" ")\n")) ;; ABSTRACTION LAYER -3 (define clause-delete-fetchers `(lambda _ (substitute* ,cmakelists-root ((,fetcher-qolm) ,null-string)) (substitute* ,cmakelists-root ((,fetcher-qtgeneratorcmake) ,null-string)) (substitute* ,cmakelists-root ((,setter-roboto) ,disable-roboto)) (substitute* ,cmakelists-root ((,setter-robotomono) ,disable-robotomono)) (substitute* ,cmakelists-root ((,setter-lato) ,disable-lato)) (substitute* ,cmakelists-fonts ((,fetcher-fonts) ,null-string)) (substitute* ,cmakelists-icons ((,hook-icons) ,null-string)) (substitute* ,cmakelists-root ((,hook-enable-icons) ,disable-icons)) (substitute* ,cmakelists-root (("\\# ───── QATERIAL TARGET ─────") "find_package(QOlm)")))) ;; (define clause-hack-icon-generator ;; `(lambda _ ;; (invoke "echo" ,qaterial-fix ">" "cmake/QaterialGenerateIcons.cmake"))) (define clause-link-qtgenerator `(lambda* (#:key inputs #:allow-other-keys) (let ((path-qtgeneratorcmake (assoc-ref inputs "qtgeneratorcmake"))) (substitute* ,cmakelists-root ((,head-hook) ,link-qtgeneratorcmake))))) (define clause-set-build-shared `(lambda _ (substitute* ,cmakelists-root ((,setter-build-shared) ,enable-build-shared)))) ;; ABSTRACTION LAYER -2 (define phase-delete-fetchers `(add-before 'configure 'delete-fetchers ,clause-delete-fetchers)) ;; (define phase-hack-icon-generator ;; `(add-before 'configure ;; 'hack-icon-generator ;; ,clause-hack-icon-generator)) (define phase-link-qtgenerator `(add-before 'configure 'link-qtgenerator ,clause-link-qtgenerator)) (define phase-set-build-shared `(add-before 'configure 'set-build-shared ,clause-set-build-shared)) ;; ABSTRACTION LAYER -1 (define phases `(modify-phases %standard-phases ,phase-delete-fetchers ,phase-set-build-shared ,phase-link-qtgenerator (add-after 'unpack 'kill-registericons (lambda _ (substitute* "src/Qaterial/Details/Utils.cpp" ((" __Qaterial_registerIconsSingleton\\(\\)") ,null-string)))) )) (define uri (git-reference (url url) (commit version))) ;; ABSTRACTION LAYER -0 (define arguments (list #:phases phases #:tests? #f)) (define inputs (list googlefontcmake qolm qtbase-5 qtdeclarative-5 qtgeneratorcmake qtquickcontrols2-5 qtsvg-5)) (define source (origin (uri uri) (method git-fetch) (sha256 hash) (patches (list (local-file "Qaterial.patch"))))) ;; SURFACE LAYER (define-public qaterial (package (name name) (version version) (source source) (build-system cmake-build-system) (arguments arguments) (inputs inputs) (synopsis synopsis) (description description) (license license:expat) (home-page home-page)))