diff options
author | Marek Paśnikowski <marek@marekpasnikowski.pl> | 2024-03-20 12:37:34 +0100 |
---|---|---|
committer | Marek Paśnikowski <marek@marekpasnikowski.pl> | 2024-03-20 12:37:34 +0100 |
commit | dfb72b837be8285612c303e056503e71ca5539ce (patch) | |
tree | 5e1b2e7ce5edddece190951a907c822e16aecd1b /packages/komodo | |
parent | dbc3b686a994969000218d6dc1836716b88aa303 (diff) |
Rename the imported private directory as package directory
Diffstat (limited to 'packages/komodo')
-rw-r--r-- | packages/komodo/cmake.scm | 442 | ||||
-rw-r--r-- | packages/komodo/cppdap.scm | 40 | ||||
-rw-r--r-- | packages/komodo/cpprestsdk.scm | 42 | ||||
-rw-r--r-- | packages/komodo/komodo-libsodium-cmakelists.txt | 744 | ||||
-rw-r--r-- | packages/komodo/komodo-libsodium-sodiumconfig.cmake.in | 61 | ||||
-rw-r--r-- | packages/komodo/komodo.scm | 178 | ||||
-rw-r--r-- | packages/komodo/libsodium-komodo.scm | 36 | ||||
-rw-r--r-- | packages/komodo/vcpkg.scm | 168 |
8 files changed, 1711 insertions, 0 deletions
diff --git a/packages/komodo/cmake.scm b/packages/komodo/cmake.scm new file mode 100644 index 0000000..3c6f924 --- /dev/null +++ b/packages/komodo/cmake.scm @@ -0,0 +1,442 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> +;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net> +;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com> +;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2017, 2018, 2020, 2021 Marius Bakke <marius@gnu.org> +;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net> +;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2019, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2019 Pierre-Moana Levesque <pierre.moana.levesque@gmail.com> +;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org> +;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (cmake) + #:use-module (cppdap) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix gexp) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix utils) + #:use-module (guix deprecation) + #:use-module (guix build-system gnu) + #:use-module (guix build-system cmake) + #:use-module (guix build-system emacs) + #:use-module ((guix search-paths) #:select ($SSL_CERT_DIR $SSL_CERT_FILE)) + #:use-module (gnu packages) + #:use-module (gnu packages backup) + #:use-module (gnu packages compression) + #:use-module (gnu packages cpp) + #:use-module (gnu packages crypto) + #:use-module (gnu packages curl) + #:use-module (gnu packages file) + #:use-module (gnu packages kde-frameworks) + #:use-module (gnu packages libevent) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages serialization) + #:use-module (gnu packages sphinx) + #:use-module (gnu packages texinfo) + #:use-module (gnu packages xml) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1)) + +(define-public cmake-shared + (let ((commit "8122f2b96c8da38ea41b653cf69958e75fe2129d") + (revision "32")) + (package + (name "cmake-shared") + (version + (git-version "1.1.0" revision commit)) + (source + (origin + (method git-fetch) + (uri + (git-reference + (url "https://github.com/lirios/cmake-shared.git") + (commit commit))) + (file-name + (git-file-name name version)) + (sha256 + (base32 "05avwzqcnliwx9h7qi1kl0iz4smqmxc4vkavyjbmlc6h2b97i58g")) + (modules '((guix build utils) + (ice-9 ftw) + (srfi srfi-1))) + (snippet + `(begin + (delete-file-recursively "3rdparty"))))) + (build-system cmake-build-system) + (arguments + `(#:tests? #f)) ; No target + (native-inputs + (list extra-cmake-modules)) + (synopsis "Shared CMake functions and macros") + (description "CMake-Shared are shared functions and macros for projects +using the CMake build system.") + (home-page "https://github.com/lirios/cmake-shared/") + (license license:bsd-3)))) + +;;; Build phases shared between 'cmake-bootstrap' and the later variants +;;; that use cmake-build-system. +(define (%common-build-phases) + `((add-after 'unpack 'split-package + ;; Remove files that have been packaged in other package recipes. + (lambda _ + (delete-file "Auxiliary/cmake-mode.el") + (substitute* "Auxiliary/CMakeLists.txt" + ((".*cmake-mode.el.*") "")))) + ,@(if (target-x86-32?) + '((add-after 'unpack 'skip-cpack-txz-test + (lambda _ + ;; In 'RunCMake.CPack_TXZ', the 'TXZ/THREADED_ALL' test + ;; would occasionally fail on i686 with "Internal error + ;; initializing compression library: Cannot allocate + ;; memory": <https://issues.guix.gnu.org/50617>. Skip it. + (substitute* "Tests/RunCMake/CPack/RunCMakeTest.cmake" + (("THREADED_ALL \"TXZ;DEB\"") + "THREADED_ALL \"DEB\""))))) + '()) + (add-before 'configure 'patch-bin-sh + (lambda _ + ;; Replace "/bin/sh" by the right path in... a lot of + ;; files. + (substitute* + '("Modules/CompilerId/Xcode-3.pbxproj.in" + "Modules/Internal/CPack/CPack.RuntimeScript.in" + "Source/cmGlobalXCodeGenerator.cxx" + "Source/cmLocalUnixMakefileGenerator3.cxx" + "Source/cmExecProgramCommand.cxx" + "Tests/CMakeLists.txt" + "Tests/RunCMake/File_Generate/RunCMakeTest.cmake") + (("/bin/sh") (which "sh"))))))) + +(define %common-disabled-tests + '(;; This test copies libgcc_s.so.1 from GCC and tries to modify its RPATH, + ;; but does not cope with the file being read-only. + "BundleUtilities" + ;; These tests require network access. + "CTestTestUpload" "CMake.FileDownload" + ;; This test requires 'ldconfig' which is not available in Guix. + "RunCMake.install" + ;; This test fails for unknown reason. + "RunCMake.file-GET_RUNTIME_DEPENDENCIES" + + "CMakeLib.testDebuggerNamedPipe-Project" + "CMakeLib.testDebuggerNamedPipe-Script")) + +(define %common-disabled-tests/hurd + '("CTestTestTimeout" + "CTestTestRerunFailed" + "RunCMake.CompilerChange" + "RunCMake.ctest_test" + "RunCMake.file" + "RunCMake.BundleUtilities" + "RunCMake.configure_file" + "RunCMake.CTestTimeout" + "RunCMake.CTestTimeoutAfterMatch" + "RunCMake.CommandLine" + "RunCMake.CTestCommandLine")) + +(define %preserved-third-party-files + '(;; 'Source/cm_getdate.c' includes archive_getdate.c wholesale, so it must + ;; be available along with the required headers. + "Utilities/cmlibarchive/libarchive/archive_getdate.c" + "Utilities/cmlibarchive/libarchive/archive_getdate.h" + ;; ELF headers. + "Utilities/cmelf" + ;; CMake header wrappers. + "Utilities/cm3p")) + +;;; The "bootstrap" CMake. It is used to build 'cmake-minimal' below, as well +;;; as any dependencies that need cmake-build-system. +(define-public cmake-bootstrap + (package + (name "cmake-bootstrap") + (version "3.27.1") + (source (origin + (method url-fetch) + (uri (string-append "https://cmake.org/files/v" + (version-major+minor version) + "/cmake-" version ".tar.gz")) + (sha256 + (base32 + "01102g2j5klqxl6jvwhwz45libcg9hnb7xchdr3r86x1bw9v19mi")) + (patches (search-patches "cmake-curl-certificates-3.24.patch")))) + (build-system gnu-build-system) + (arguments + (list + #:test-target "test" + #:configure-flags + #~(let ((parallel-job-count (number->string (parallel-job-count)))) + (list "--verbose" + (string-append "--parallel=" parallel-job-count) + (string-append "--prefix=" #$output) + "--system-libs" + "--no-system-cppdap" + ;; By default, the man pages and other docs land + ;; in PREFIX/man and PREFIX/doc, but we want them + ;; in share/{man,doc}. Note that unlike + ;; autoconf-generated configure scripts, cmake's + ;; configure prepends "PREFIX/" to what we pass + ;; to --mandir and --docdir. + "--mandir=share/man" + (string-append "--docdir=share/doc/cmake-" + #$(version-major+minor version)) + + ;; By default CMake is built without any optimizations. Use + ;; the recommended Release target for a ~2.5x speedup. + "--" "-DCMAKE_BUILD_TYPE=Release")) + #:make-flags + #~(let ((skipped-tests + (list #$@%common-disabled-tests + "CTestTestSubdir" ; This test fails to build 2 of the 3 tests. + ;; This test fails when ARGS (below) is in use, see + ;; <https://gitlab.kitware.com/cmake/cmake/issues/17165>. + "CTestCoverageCollectGCOV" + #$@(if (target-hurd?) + %common-disabled-tests/hurd + #~())))) + (list + (string-append + ;; These arguments apply for the tests only. + "ARGS=-j " (number->string (parallel-job-count)) + " --output-on-failure" + " --exclude-regex ^\\(" (string-join skipped-tests "\\|") "\\)$"))) + #:phases + #~(modify-phases %standard-phases + #$@(%common-build-phases) + (add-before 'configure 'set-paths + (lambda _ + ;; Help cmake's bootstrap process to find system libraries + (begin + (setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH")) + (setenv "CMAKE_INCLUDE_PATH" (or (getenv "CPATH") + (getenv "C_INCLUDE_PATH")))))) + ;; CMake uses its own configure script. + (replace 'configure + (lambda* (#:key (configure-flags '()) #:allow-other-keys) + (apply invoke "./configure" configure-flags))) + #$@(if (target-hurd?) + #~((add-after 'unpack 'patch-hurd + (lambda _ + ;; Version 3.25.0 has a similar fix. + (substitute* "Utilities/cmlibuv/src/unix/udp.c" + (("!defined\\(__QNX__\\)") + "!defined(__GNU__)"))))) + #~())))) + (inputs + (list + libuv bzip2 cppdap curl expat file jsoncpp libarchive nlohmann-json rhash + zlib)) + (native-search-paths + (list (search-path-specification + (variable "CMAKE_PREFIX_PATH") + (files '(""))) + ;; "cmake-curl-certificates.patch" changes CMake to honor 'SSL_CERT_DIR' + ;; and 'SSL_CERT_FILE', hence these search path entries. + $SSL_CERT_DIR + $SSL_CERT_FILE)) + (home-page "https://cmake.org/") + (synopsis "Cross-platform build system") + (description + "CMake is a family of tools designed to build, test and package software. +CMake is used to control the software compilation process using simple platform +and compiler independent configuration files. CMake generates native makefiles +and workspaces that can be used in the compiler environment of your choice.") + (properties '((hidden? . #t))) + (license (list license:bsd-3 ; cmake + license:expat ; cmjsoncpp is dual MIT/public domain + license:public-domain)))) ; cmlibarchive/archive_getdate.c + +;;; This minimal variant of CMake does not include the documentation. It is +;;; used by the cmake-build-system. +(define-public cmake-minimal + (package + (inherit cmake-bootstrap) + (name "cmake-minimal") + (properties (alist-delete 'hidden? (package-properties cmake-bootstrap))) + (source (origin + (inherit (package-source cmake-bootstrap)) + ;; Purge CMakes bundled dependencies as they are no longer needed. + (modules '((ice-9 ftw))) + (snippet + `(begin + (define preserved-files ',%preserved-third-party-files) + + ;; (file-system-fold (lambda (dir stat result) ;enter? + ;; (or (string=? "Utilities" dir) ;init + ;; ;; The bundled dependencies are + ;; ;; distinguished by having a "cm" + ;; ;; prefix to their upstream names. + ;; (and (string-prefix? "Utilities/cm" dir) + ;; (not (member dir preserved-files))))) + ;; (lambda (file stat result) ;leaf + ;; (unless (or (member file preserved-files) + ;; ;; Preserve top-level files. + ;; (string=? "Utilities" + ;; (dirname file))) + ;; (delete-file file))) + ;; (const #t) ;down + ;; (lambda (dir stat result) ;up + ;; (when (equal? (scandir dir) '("." "..")) + ;; (rmdir dir))) + ;; (const #t) ;skip + ;; (lambda (file stat errno result) + ;; (format (current-error-port) + ;; "warning: failed to delete ~a: ~a~%" + ;; file (strerror errno))) + ;; #t + ;; "Utilities" + ;; lstat) + #t)))) + (build-system cmake-build-system) + (arguments + (list + #:configure-flags + #~(list "-DCMAKE_USE_SYSTEM_LIBRARIES=ON" + (string-append "-DCMAKE_DOC_DIR=share/doc/cmake-" + #$(version-major+minor (package-version + cmake-bootstrap)))) + + ;; This is the CMake used in cmake-build-system. Ensure compiler + ;; optimizations are enabled to save size and CPU cycles. + #:build-type "Release" + #:phases + #~(modify-phases %standard-phases + #$@(%common-build-phases) + (add-after 'install 'delete-help-documentation + (lambda _ + (delete-file-recursively + (string-append #$output + "/share/cmake-" + #$(version-major+minor + (package-version cmake-bootstrap)) + "/Help")))) + (replace 'check + (lambda* (#:key tests? parallel-tests? #:allow-other-keys) + (let ((skipped-tests (list #$@%common-disabled-tests + ;; This test requires the bundled libuv. + "BootstrapTest" + #$@(if (system-hurd?) + %common-disabled-tests/hurd + #~())))) + (if tests? + (begin + (invoke "ctest" "-j" (if parallel-tests? + (number->string (parallel-job-count)) + "1") + "--exclude-regex" + (string-append "^(" (string-join skipped-tests "|") ")$"))) + (format #t "test suite not run~%")))))) + #:cmake (if (%current-target-system) + cmake-minimal-cross + cmake-bootstrap))))) + +;;; The "user-facing" CMake, now with manuals and HTML documentation. +(define-public cmake + (package + (inherit cmake-minimal) + (name "cmake") + (version "3.27.1") + (source (origin + (inherit (package-source cmake-minimal)) + (method url-fetch) + (uri (string-append "https://cmake.org/files/v" + (version-major+minor version) + "/cmake-" version ".tar.gz")) + (snippet (match (origin-snippet (package-source cmake-minimal)) + (('begin ('define 'preserved-files ('quote x)) + rest ...) + `(begin (define preserved-files + ',(cons "Utilities/cmelf" x)) + ,@rest)))) + (sha256 + (base32 + "01102g2j5klqxl6jvwhwz45libcg9hnb7xchdr3r86x1bw9v19mi")) + (patches (search-patches "cmake-curl-certificates-3.24.patch")))) + (outputs '("out" "doc")) + (arguments + (substitute-keyword-arguments (package-arguments cmake-minimal) + ;; Use cmake-minimal this time. + ((#:cmake _ #f) + (if (%current-target-system) + cmake-minimal-cross + cmake-minimal)) + + ;; Enable debugging information for convenience. + ((#:build-type _ #f) "RelWithDebInfo") + + ((#:configure-flags flags ''()) + #~(append (list "-DSPHINX_INFO=ON" "-DSPHINX_MAN=ON" "-DSPHINX_HTML=ON" + (string-append "-DCMAKE_DOC_DIR=share/doc/cmake-" + #$(version-major+minor (package-version + cmake-minimal))) + "-DCMAKE_INFO_DIR=share/info" + "-DCMAKE_MAN_DIR=share/man") + #$flags)) + ((#:phases phases) + #~(modify-phases #$phases + (delete 'delete-help-documentation) + (add-after 'install 'move-html-doc + (lambda _ + (let ((html (string-append "/share/doc/cmake-" + #$(version-major+minor + (package-version cmake-minimal)) + "/html"))) + (copy-recursively (string-append #$output html) + (string-append #$output:doc html)) + (delete-file-recursively (string-append #$output html))))))))) + (inputs + (modify-inputs (package-inputs cmake-minimal) + (prepend ncurses))) ;required for ccmake + ;; Extra inputs required to build the documentation. + (native-inputs + (modify-inputs (package-native-inputs cmake-minimal) + (append python-sphinx + texinfo))) + (properties (alist-delete 'hidden? (package-properties cmake-minimal))))) + +(define-public cmake-minimal-cross + (package + (inherit cmake-minimal) + (name "cmake-minimal-cross") + (native-search-paths '()) + (search-paths + (package-native-search-paths cmake-minimal)))) + +(define-public emacs-cmake-mode + (package + (inherit cmake) + (name "emacs-cmake-mode") + (native-inputs '()) + (inputs '()) + (outputs '("out")) + (build-system emacs-build-system) + (arguments + (list #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'chdir-elisp + ;; Elisp directory is not in root of the source. + (lambda _ + (chdir "Auxiliary")))))) + (synopsis "Emacs major mode for editing Cmake expressions") + (description "@code{cmakeos-mode} provides an Emacs major mode for editing +Cmake files. It supports syntax highlighting, indenting and refilling of +comments."))) diff --git a/packages/komodo/cppdap.scm b/packages/komodo/cppdap.scm new file mode 100644 index 0000000..1278e9d --- /dev/null +++ b/packages/komodo/cppdap.scm @@ -0,0 +1,40 @@ +(define-module (cppdap) + #:use-module (gnu packages cpp) + #:use-module (guix build-system cmake) + #:use-module (guix git-download) + #:use-module + ((guix licenses) + #:prefix license:) + #:use-module (guix packages)) + +(define-public cppdap + (let ((cppdap-commit "5857b55c151c2efc1aea1ee0501e8d09f740d41b") + (cppdap-github "https://github.com/google/cppdap")) + (package + (name "cppdap") + (version cppdap-commit) + (source + (origin + (uri + (git-reference + (url (string-append cppdap-github ".git")) + (commit cppdap-commit))) + (method git-fetch) + (hash + (content-hash "08bdsn0568hidq51fzw63ph0wkri8siid74fxp7sqvxjv04164pr")))) + (build-system cmake-build-system) + (arguments + (list + #:phases '(modify-phases %standard-phases (delete 'check)) + #:configure-flags + '(list "-DCPPDAP_USE_EXTERNAL_NLOHMANN_JSON_PACKAGE=ON"))) + (native-inputs (list nlohmann-json)) + (synopsis "C++ library for the Debug Adapter Protocol") + (description + (string-append + "cppdap is a C++11 library (\"SDK\") implementation of the Debug Adapter " + "Protocol, providing an API for implementing a DAP client or server. " + "cppdap provides C++ type-safe structures for the full DAP specification, " + "and provides a simple way to add custom protocol messages.")) + (license license:asl2.0) + (home-page cppdap-github)))) diff --git a/packages/komodo/cpprestsdk.scm b/packages/komodo/cpprestsdk.scm new file mode 100644 index 0000000..a558b25 --- /dev/null +++ b/packages/komodo/cpprestsdk.scm @@ -0,0 +1,42 @@ +(define-module (cpprestsdk) + #:use-module (gnu packages boost) + #:use-module (gnu packages compression) + #:use-module (gnu packages tls) + #:use-module (gnu packages web) + #:use-module (guix build-system cmake) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module ((guix licenses) + #:prefix license:) + #:use-module (guix packages)) + +(define-public cpprestsdk + (package + (name "cpprestsdk") + (version "v2.10.16") + (source + (origin + (uri + (git-reference + ;; This fork includes a fix to an out-of-bounds error. + (url "https://github.com/priv-kweihmann/cpprestsdk") + (commit "gcc10-64bit"))) + (method git-fetch) + (hash + (content-hash + "03cd0p0fjvfi94avqvf00g89a9qqkj2r7skm4xnvr4p7hihw1ikd")))) + (build-system cmake-build-system) + (arguments + (list + #:phases + #~ (modify-phases %standard-phases (delete 'check)))) + (native-inputs (list boost openssl websocketpp zlib)) + (synopsis "The Microsoft C++ REST SDK") + (description + (string-append + "The C++ REST SDK is a Microsoft project for cloud-based client-server " + "communication in native code using a modern asynchronous C++ API " + "design. This project aims to help C++ developers connect to and " + "interact with services.")) + (license license:expat) + (home-page "https://github.com/microsoft/cpprestsdk"))) diff --git a/packages/komodo/komodo-libsodium-cmakelists.txt b/packages/komodo/komodo-libsodium-cmakelists.txt new file mode 100644 index 0000000..cb26b36 --- /dev/null +++ b/packages/komodo/komodo-libsodium-cmakelists.txt @@ -0,0 +1,744 @@ +cmake_minimum_required(VERSION 3.9) + +include(CheckCSourceRuns) + +file(STRINGS ${CMAKE_CURRENT_LIST_DIR}/configure.ac config_ac_contents) + +foreach (line ${config_ac_contents}) + if (line MATCHES "AC_INIT\\(\\[libsodium\\],\\[([0-9.]+)\\],") + set(VERSION ${CMAKE_MATCH_1}) + elseif (line MATCHES "SODIUM_LIBRARY_VERSION_(MAJOR|MINOR)=([0-9]+)") + set(SODIUM_LIBRARY_VERSION_${CMAKE_MATCH_1} ${CMAKE_MATCH_2}) + endif () +endforeach () + +message("VERSION: ${VERSION}") +message("SODIUM_LIBRARY_VERSION_MAJOR: ${SODIUM_LIBRARY_VERSION_MAJOR}") +message("SODIUM_LIBRARY_VERSION_MINOR: ${SODIUM_LIBRARY_VERSION_MINOR}") + +project(sodium VERSION ${VERSION} LANGUAGES C ASM) + +include(CheckCSourceCompiles) +include(CheckFunctionExists) +include(CheckIncludeFile) +include(CMakePackageConfigHelpers) +include(CTest) +include(GNUInstallDirs) +include(TestBigEndian) + +set(CMAKE_C_STANDARD 99) +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +set(CMAKE_DISABLE_SOURCE_CHANGES ON) +set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) + +option(BUILD_SHARED_LIBS "Build shared library" ${BUILD_SHARED_LIBS}) +option(ENABLE_SSP "Compile with -fstack-protector" ON) +option(ENABLE_PIE "Compile with -fPIE" ON) +option(ENABLE_BLOCKING_RANDOM "Enable blocking random" OFF) +option(ENABLE_MINIMAL "Only compile the minimum set of functions required for the high-level API" OFF) +option(ENABLE_PTHREADS "Use pthreads library" ON) +option(ENABLE_RETPOLINE "Use return trampolines for indirect calls" OFF) + +if (ENABLE_MINIMAL) + set(SODIUM_LIBRARY_MINIMAL_DEF "#define SODIUM_LIBRARY_MINIMAL 1") +endif () + +configure_file( + src/libsodium/include/sodium/version.h.in + ${CMAKE_BINARY_DIR}/sodium/version.h +) + +file(GLOB sodium_headers + ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium/*.h + ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium.h + ${CMAKE_BINARY_DIR}/sodium/version.h +) + +if (UNIX) + file(GLOB_RECURSE sodium_sources + ${PROJECT_SOURCE_DIR}/src/libsodium/*.c + ${PROJECT_SOURCE_DIR}/src/libsodium/*.S # HAVE_AVX_ASM + ) +else () + file(GLOB_RECURSE sodium_sources + ${PROJECT_SOURCE_DIR}/src/libsodium/*.c + ) +endif () + +if (MSVC) + enable_language(RC) + + list(APPEND sodium_sources + builds/msvc/resource.rc + ) +endif () + +add_library(${PROJECT_NAME} + ${sodium_headers} + ${sodium_sources} +) + +set_target_properties(${PROJECT_NAME} + PROPERTIES + PREFIX "" + OUTPUT_NAME "lib${PROJECT_NAME}" +) + +test_big_endian(IS_BIG_ENDIAN) + +if (IS_BIG_ENDIAN) + target_compile_definitions(${PROJECT_NAME} PRIVATE NATIVE_BIG_ENDIAN) +else () + target_compile_definitions(${PROJECT_NAME} PRIVATE NATIVE_LITTLE_ENDIAN) +endif () + +macro (sodium_check_func func var) + check_function_exists(${func} ${var}) + if (${var}) + target_compile_definitions(${PROJECT_NAME} PRIVATE ${var}=1) + endif () +endmacro () + +if (MSVC) + target_compile_options(${PROJECT_NAME} + PRIVATE + /D_CONSOLE + /D_CRT_SECURE_NO_WARNINGS + /DCPU_UNALIGNED_ACCESS=1 + /MP + /Dinline=__inline + /wd4068 # Unknown pragma + /wd4197 + /wd4244 # Macro redefinition + ) + + target_link_libraries(${PROJECT_NAME} + PUBLIC + advapi32 + ) +else () + if (ENABLE_BLOCKING_RANDOM) + target_compile_definitions(${PROJECT_NAME} PRIVATE USE_BLOCKING_RANDOM) + endif () + + if (ENABLE_PTHREADS) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_PTHREAD) + target_compile_options(${PROJECT_NAME} PRIVATE -ftls-model=local-dynamic) + target_compile_options(${PROJECT_NAME} PUBLIC -pthread) + endif () + + if (ENABLE_SSP) + target_compile_options(${PROJECT_NAME} PRIVATE -fstack-protector-all) + endif () + + if (ENABLE_PIE) + target_compile_options(${PROJECT_NAME} PRIVATE -fPIE) + endif () + + if (ENABLE_RETPOLINE) + target_compile_options(${PROJECT_NAME} + PRIVATE + -mindirect-branch=thunk-inline + -mindirect-branch-register + ) + endif () + + target_compile_options(${PROJECT_NAME} + PRIVATE + -flax-vector-conversions + -fvisibility=hidden + -fPIC + -fwrapv + -Wall + -Wextra + -Wbad-function-cast + -Wcast-qual + #-Wdiv-by-zero + #-Wduplicated-branches + #-Wduplicated-cond + -Wfloat-equal + -Wformat=2 + -Wlogical-op + -Wmaybe-uninitialized + #-Wmisleading-indentation + -Wmissing-declarations + -Wmissing-prototypes + -Wnested-externs + #-Wno-type-limits + #-Wno-unknown-pragmas + -Wnormalized=id + #-Wnull-dereference + -Wold-style-declaration + -Wpointer-arith + -Wredundant-decls + #-Wrestrict + #-Wsometimes-uninitialized + -Wstrict-prototypes + -Wswitch-enum + #-Wvariable-decl + -Wwrite-strings + -Wl,-z,relro + -Wl,-z,now + -Wl,-z,noexecstack + ) + + if (CMAKE_C_COMPILER_ID STREQUAL "Clang" OR + CMAKE_C_COMPILER_ID STREQUAL "AppleClang") + target_compile_options(${PROJECT_NAME} + PRIVATE + -Wno-unknown-warning-option + -Wshorten-64-to-32 + ) + endif () + + check_include_file(sys/mman.h HAVE_SYS_MMAN_H) + if (HAVE_SYS_MMAN_H) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_SYS_MMAN_H) + endif () + + sodium_check_func(arc4random HAVE_SAFE_ARC4RANDOM) + sodium_check_func(mmap HAVE_MMAP) + sodium_check_func(mlock HAVE_MLOCK) + sodium_check_func(madvise HAVE_MADVISE) + sodium_check_func(mprotect HAVE_MPROTECT) + sodium_check_func(memset_s HAVE_MEMSET_S) + sodium_check_func(explicit_bzero HAVE_EXPLICIT_BZERO) + sodium_check_func(explicit_memset HAVE_EXPLICIT_MEMSET) + sodium_check_func(nanosleep HAVE_NANOSLEEP) + sodium_check_func(posix_memalign HAVE_POSIX_MEMALIGN) + sodium_check_func(getpid HAVE_GETPID) + + check_c_source_runs( + " + #pragma GCC target(\"mmx\") + #include <mmintrin.h> + int main(void) + { + __m64 x = _mm_setzero_si64(); + } + " + HAVE_MMINTRIN_H + ) + + if (HAVE_MMINTRIN_H) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_MMINTRIN_H=1) + target_compile_options(${PROJECT_NAME} PRIVATE -mmmx) + endif () + + check_c_source_runs( + " + #pragma GCC target(\"sse2\") + #ifndef __SSE2__ + # define __SSE2__ + #endif + + #include <emmintrin.h> + int main(void) { + __m128d x = _mm_setzero_pd(); + __m128i z = _mm_srli_epi64(_mm_setzero_si128(), 26); + } + " + HAVE_EMMINTRIN_H + ) + + if (HAVE_EMMINTRIN_H) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_EMMINTRIN_H=1) + target_compile_options(${PROJECT_NAME} PRIVATE -msse2) + endif () + + check_c_source_runs( + " + #pragma GCC target(\"sse3\") + #include <pmmintrin.h> + int main(void) { + __m128 x = _mm_addsub_ps(_mm_cvtpd_ps(_mm_setzero_pd()), _mm_cvtpd_ps(_mm_setzero_pd())); + } + " + HAVE_PMMINTRIN_H + ) + + if (HAVE_PMMINTRIN_H) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_PMMINTRIN_H=1) + target_compile_options(${PROJECT_NAME} PRIVATE -msse3) + endif () + + check_c_source_runs( + " + #pragma GCC target(\"ssse3\") + #include <tmmintrin.h> + int main(void) { + __m64 x = _mm_abs_pi32(_m_from_int(0)); + } + " + HAVE_TMMINTRIN_H + ) + + if (HAVE_TMMINTRIN_H) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_TMMINTRIN_H=1) + target_compile_options(${PROJECT_NAME} PRIVATE -mssse3) + endif () + + check_c_source_runs( + " + #pragma GCC target(\"sse4.1\") + #include <smmintrin.h> + int main(void) { + __m128i x = _mm_minpos_epu16(_mm_setzero_si128()); + } + " + HAVE_SMMINTRIN_H + ) + + if (HAVE_SMMINTRIN_H) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_SMMINTRIN_H=1) + target_compile_options(${PROJECT_NAME} PRIVATE -msse4.1) + endif () + + check_c_source_runs( + " + #ifdef __native_client__ + # error NativeClient detected - Avoiding AVX opcodes + #endif + #pragma GCC target(\"avx\") + #include <immintrin.h> + int main(void) { + _mm256_zeroall(); + } + " + HAVE_AVXINTRIN_H + ) + + if (HAVE_AVXINTRIN_H) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AVXINTRIN_H=1) + target_compile_options(${PROJECT_NAME} PRIVATE -mavx) + endif () + + check_c_source_runs( + " + #ifdef __native_client__ + # error NativeClient detected - Avoiding AVX2 opcodes + #endif + #pragma GCC target(\"avx2\") + #include <immintrin.h> + int main(void) { + __m256 x = _mm256_set1_ps(3.14); + __m256 y = _mm256_permutevar8x32_ps(x, _mm256_set1_epi32(42)); + return _mm256_movemask_ps(_mm256_cmp_ps(x, y, _CMP_NEQ_OQ)); + } + " + HAVE_AVX2INTRIN_H + ) + + if (HAVE_AVX2INTRIN_H) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AVX2INTRIN_H=1) + target_compile_options(${PROJECT_NAME} PRIVATE -mavx2) + + check_c_source_runs( + " + #ifdef __native_client__ + # error NativeClient detected - Avoiding AVX2 opcodes + #endif + #pragma GCC target(\"avx2\") + #include <immintrin.h> + int main(void) { + __m256i y = _mm256_broadcastsi128_si256(_mm_setzero_si128()); + } + " + _mm256_broadcastsi128_si256_DEFINED + ) + + if (NOT _mm256_broadcastsi128_si256_DEFINED) + target_compile_definitions(${PROJECT_NAME} + PRIVATE + _mm256_broadcastsi128_si256=_mm_broadcastsi128_si256 + ) + endif () + endif () + + check_c_source_runs( + " + #ifdef __native_client__ + # error NativeClient detected - Avoiding AVX512F opcodes + #endif + #pragma GCC target(\"avx512f\") + #include <immintrin.h> + + #ifndef __AVX512F__ + # error No AVX512 support + #elif defined(__clang__) + # if __clang_major__ < 4 + # error Compiler AVX512 support may be broken + # endif + #elif defined(__GNUC__) + # if __GNUC__ < 6 + # error Compiler AVX512 support may be broken + # endif + #endif + + int main(void) { + __m512i x = _mm512_setzero_epi32(); + __m512i y = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), x); + } + " + HAVE_AVX512FINTRIN_H + ) + + if (HAVE_AVX512FINTRIN_H) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AVX512FINTRIN_H=1) + target_compile_options(${PROJECT_NAME} PRIVATE -mavx512f) + else () + target_compile_options(${PROJECT_NAME} PRIVATE -mno-avx512f) + endif () + + check_c_source_runs( + " + #ifdef __native_client__ + # error NativeClient detected - Avoiding AESNI opcodes + #endif + #pragma GCC target(\"aes\") + #pragma GCC target(\"pclmul\") + #include <wmmintrin.h> + + int main(void) { + __m128i x = _mm_aesimc_si128(_mm_setzero_si128()); + __m128i y = _mm_clmulepi64_si128(_mm_setzero_si128(), _mm_setzero_si128(), 0); + } + " + HAVE_WMMINTRIN_H + ) + + if (HAVE_WMMINTRIN_H) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_WMMINTRIN_H=1) + target_compile_options(${PROJECT_NAME} PRIVATE -maes -mpclmul) + endif () + + check_c_source_runs( + " + #ifdef __native_client__ + # error NativeClient detected - Avoiding RDRAND opcodes + #endif + #pragma GCC target(\"rdrnd\") + #include <immintrin.h> + + int main(void) { + unsigned long long x; + _rdrand64_step(&x); + } + " + HAVE_RDRAND + ) + + if (HAVE_RDRAND) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_RDRAND=1) + target_compile_options(${PROJECT_NAME} PRIVATE -mrdrnd) + endif () + + check_c_source_runs( + " + #include <intrin.h> + + int main(void) { + (void) _xgetbv(0); + } + " + HAVE__XGETBV + ) + + if (HAVE__XGETBV) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE__XGETBV=1) + endif () + + check_c_source_runs( + " + int main(void) { + int a = 42; + int *pnt = &a; + __asm__ __volatile__ (\"\" : : \"r\"(pnt) : \"memory\"); + } + " + HAVE_INLINE_ASM + ) + + if (HAVE_INLINE_ASM) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_INLINE_ASM=1) + endif () + + check_c_source_runs( + " + int main(void) { + #if defined(__amd64) || defined(__amd64__) || defined(__x86_64__) + # if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__) || defined(_WIN32) || defined(_WIN64) + # error Windows x86_64 calling conventions are not supported yet + # endif + /* neat */ + #else + # error !x86_64 + #endif + unsigned char i = 0, o = 0, t; + __asm__ __volatile__ (\"pxor %%xmm12, %%xmm6 \n\" + \"movb (%[i]), %[t] \n\" + \"addb %[t], (%[o]) \n\" + : [t] \"=&r\"(t) + : [o] \"D\"(&o), [i] \"S\"(&i) + : \"memory\", \"flags\", \"cc\"); + } + " + HAVE_AMD64_ASM + ) + + if (HAVE_AMD64_ASM) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AMD64_ASM=1) + endif () + + check_c_source_runs( + " + int main(void) { + #if defined(__amd64) || defined(__amd64__) || defined(__x86_64__) + # if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__) || defined(_WIN32) || defined(_WIN64) + # error Windows x86_64 calling conventions are not supported yet + # endif + /* neat */ + #else + # error !x86_64 + #endif + __asm__ __volatile__ (\"vpunpcklqdq %xmm0,%xmm13,%xmm0\"); + } + " + HAVE_AVX_ASM + ) + + if (HAVE_AVX_ASM) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AVX_ASM=1) + endif () + + check_c_source_runs( + " + #if !defined(__clang__) && !defined(__GNUC__) && !defined(__SIZEOF_INT128__) + # error mode(TI) is a gcc extension, and __int128 is not available + #endif + #if defined(__clang__) && !defined(__x86_64__) && !defined(__aarch64__) + # error clang does not properly handle the 128-bit type on 32-bit systems + #endif + #ifndef NATIVE_LITTLE_ENDIAN + # error libsodium currently expects a little endian CPU for the 128-bit type + #endif + #ifdef __EMSCRIPTEN__ + # error emscripten currently doesn't support some operations on integers larger than 64 bits + #endif + #include <stddef.h> + #include <stdint.h> + #if defined(__SIZEOF_INT128__) + typedef unsigned __int128 uint128_t; + #else + typedef unsigned uint128_t __attribute__((mode(TI))); + #endif + void fcontract(uint128_t *t) { + *t += 0x8000000000000 - 1; + *t *= *t; + *t >>= 84; + } + + int main(void) { + (void) fcontract; + } + " + HAVE_TI_MODE + ) + + if (HAVE_TI_MODE) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_TI_MODE=1) + endif () + + check_c_source_runs( + " + int main(void) { + unsigned int cpu_info[4]; + __asm__ __volatile__ (\"xchgl %%ebx, %k1; cpuid; xchgl %%ebx, %k1\" : + \"=a\" (cpu_info[0]), \"=&r\" (cpu_info[1]), + \"=c\" (cpu_info[2]), \"=d\" (cpu_info[3]) : + \"0\" (0U), \"2\" (0U)); + } + " + HAVE_CPUID + ) + + if (HAVE_CPUID) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_CPUID=1) + endif () + + check_c_source_runs( + " + #if !defined(__ELF__) && !defined(__APPLE_CC__) + # error Support for weak symbols may not be available + #endif + __attribute__((weak)) void __dummy(void *x) { } + void f(void *x) { __dummy(x); } + int main(void) {} + " + HAVE_WEAK_SYMBOLS + ) + + if (HAVE_WEAK_SYMBOLS) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_WEAK_SYMBOLS=1) + endif () + + check_c_source_runs( + " + int main(void) { + static volatile int _sodium_lock; + __sync_lock_test_and_set(&_sodium_lock, 1); + __sync_lock_release(&_sodium_lock); + } + " + HAVE_ATOMIC_OPS + ) + + if (HAVE_ATOMIC_OPS) + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_ATOMIC_OPS=1) + endif () + + check_c_source_runs( + " + #include <limits.h> + #include <stdint.h> + int main(void) { + (void) SIZE_MAX; + (void) UINT64_MAX; + } + " + STDC_LIMIT_MACROS_REQUIRED + ) + + if (STDC_LIMIT_MACROS_REQUIRED) + target_compile_definitions(${PROJECT_NAME} + PRIVATE + __STDC_LIMIT_MACROS + __STDC_CONSTANT_MACROS + ) + endif () + + # include/sodium/private/common.h + target_compile_definitions(${PROJECT_NAME} PRIVATE CONFIGURED=1) +endif () + +if (BUILD_SHARED_LIBS) + if (MSVC) + target_compile_definitions(${PROJECT_NAME} + PRIVATE + SODIUM_DLL_EXPORT + ) + endif () +else () + target_compile_definitions(${PROJECT_NAME} + PUBLIC + SODIUM_STATIC + ) +endif () + +target_include_directories(${PROJECT_NAME} + PRIVATE + $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium> + $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/sodium> +) + +if (BUILD_TESTING) + file(GLOB sodium_test_sources ${PROJECT_SOURCE_DIR}/test/default/*.c) + + foreach (test_src ${sodium_test_sources}) + get_filename_component(test_name ${test_src} NAME_WE) + + add_executable(${test_name} ${test_src}) + + if (MSVC) + target_compile_definitions(${test_name} PRIVATE _CRT_SECURE_NO_WARNINGS) + endif () + + target_include_directories(${test_name} + PRIVATE + $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/libsodium/include> + $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium> + $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}> + $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/test/quirks> + ) + + target_link_libraries(${test_name} PRIVATE ${PROJECT_NAME}) + + add_custom_command(TARGET ${test_name} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${CMAKE_CURRENT_LIST_DIR}/test/default/${test_name}.exp" + $<TARGET_FILE_DIR:${test_name}>) + + add_test( + NAME ${test_name} + COMMAND ${test_name} + WORKING_DIRECTORY $<TARGET_FILE_DIR:${test_name}> + ) + endforeach () +endif () + +install(DIRECTORY src/libsodium/include/ + DESTINATION include/ + USE_SOURCE_PERMISSIONS + PATTERN "*.h" + PATTERN "*.h.in" EXCLUDE + REGEX "private($|/)" EXCLUDE +) + +install(FILES ${CMAKE_BINARY_DIR}/sodium/version.h + DESTINATION include/sodium +) + +install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}-targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +install(EXPORT ${PROJECT_NAME}-targets + FILE unofficial-${PROJECT_NAME}Targets.cmake + NAMESPACE unofficial-${PROJECT_NAME}:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/unofficial-${PROJECT_NAME} +) + +set(TARGET_NAME unofficial-${PROJECT_NAME}::${PROJECT_NAME}) + +configure_package_config_file( + ${PROJECT_NAME}Config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/unofficial-${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION ${PROJECT_BINARY_DIR} +) + +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/unofficial-${PROJECT_NAME}ConfigVersion.cmake + VERSION ${VERSION} + COMPATIBILITY AnyNewerVersion +) + +unset(TARGET_NAME) + +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/unofficial-${PROJECT_NAME}Config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/unofficial-${PROJECT_NAME}ConfigVersion.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/unofficial-${PROJECT_NAME} +) + +# References: +# https://github.com/boost-cmake/bcm/wiki/Cmake-best-practices-and-guidelines +# https://github.com/jedisct1/libsodium/pull/74/files +# https://github.com/jedisct1/libsodium/pull/156/files +# https://github.com/jedisct1/libsodium/pull/181/files +# https://github.com/jedisct1/libsodium/issues/378 +# https://github.com/jedisct1/libsodium/issues/636 +# https://github.com/jedisct1/libsodium/issues/771 +# https://github.com/jedisct1/libsodium/blob/gyp/sodium.gyp +# https://github.com/imefisto/cmake-libsodium +# https://github.com/Cyberunner23/libsodium-CMake +# https://stackoverflow.com/questions/29901352/appending-to-cmake-c-flags +# https://stackoverflow.com/questions/986426/what-do-stdc-limit-macros-and-stdc-constant-macros-mean +# https://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html +# https://stackoverflow.com/questions/15132185/mixing-c-and-assembly-sources-and-build-with-cmake +# https://stackoverflow.com/questions/647892/how-to-check-header-files-and-library-functions-in-cmake-like-it-is-done-in-auto +# https://stackoverflow.com/questions/31038963/how-do-you-rename-a-library-filename-in-cmake diff --git a/packages/komodo/komodo-libsodium-sodiumconfig.cmake.in b/packages/komodo/komodo-libsodium-sodiumconfig.cmake.in new file mode 100644 index 0000000..9673dab --- /dev/null +++ b/packages/komodo/komodo-libsodium-sodiumconfig.cmake.in @@ -0,0 +1,61 @@ +# sodium cmake module +# This module sets the following variables in your project: +# +# sodium_FOUND - true if sodium found on the system +# sodium_INCLUDE_DIR - the directory containing sodium headers +# sodium_LIBRARY_DEBUG +# sodium_LIBRARY_RELEASE +# sodium_LIBRARIES +# sodium_VERSION +# + +include(FindPackageHandleStandardArgs) +include(SelectLibraryConfigurations) + +@PACKAGE_INIT@ + +if (NOT TARGET @TARGET_NAME@) + include("${CMAKE_CURRENT_LIST_DIR}/unofficial-@PROJECT_NAME@Targets.cmake") + + set(@PROJECT_NAME@_VERSION @VERSION@) + + get_target_property(@PROJECT_NAME@_INCLUDE_DIR @TARGET_NAME@ INTERFACE_INCLUDE_DIRECTORIES) + + get_target_property(@PROJECT_NAME@_LIBRARY_DEBUG @TARGET_NAME@ IMPORTED_IMPLIB_DEBUG) + if (@PROJECT_NAME@_LIBRARY_DEBUG MATCHES ".*-NOTFOUND") + get_target_property(@PROJECT_NAME@_LIBRARY_DEBUG @TARGET_NAME@ IMPORTED_LOCATION_DEBUG) + else () + get_target_property(@PROJECT_NAME@_DLL_DEBUG @TARGET_NAME@ IMPORTED_LOCATION_DEBUG) + endif () + + get_target_property(@PROJECT_NAME@_LIBRARY_RELEASE @TARGET_NAME@ IMPORTED_IMPLIB_RELEASE) + if (@PROJECT_NAME@_LIBRARY_RELEASE MATCHES ".*-NOTFOUND") + get_target_property(@PROJECT_NAME@_LIBRARY_RELEASE @TARGET_NAME@ IMPORTED_LOCATION_RELEASE) + else () + get_target_property(@PROJECT_NAME@_DLL_RELEASE @TARGET_NAME@ IMPORTED_LOCATION_RELEASE) + endif () + + select_library_configurations(@PROJECT_NAME@) +endif () + +find_package_handle_standard_args( + @PROJECT_NAME@ + REQUIRED_VARS + @PROJECT_NAME@_INCLUDE_DIR + @PROJECT_NAME@_LIBRARIES + VERSION_VAR + @PROJECT_NAME@_VERSION +) + +mark_as_advanced(@PROJECT_NAME@_INCLUDE_DIR) + +if (WIN32) + mark_as_advanced(@PROJECT_NAME@_DLL_DEBUG) + mark_as_advanced(@PROJECT_NAME@_DLL_RELEASE) +endif() + + +# References: +# https://github.com/jedisct1/libsodium/blob/master/contrib/Findsodium.cmake +# https://github.com/QuantStack/xeus/blob/master/xeusConfig.cmake.in +# https://github.com/zeromq/libzmq/blob/master/builds/cmake/ZeroMQConfig.cmake.in
\ No newline at end of file diff --git a/packages/komodo/komodo.scm b/packages/komodo/komodo.scm new file mode 100644 index 0000000..7ee7eae --- /dev/null +++ b/packages/komodo/komodo.scm @@ -0,0 +1,178 @@ +(define-module (komodo) + #:use-module (cpprestsdk) + #:use-module (gnu packages) + #:use-module (gnu packages boost) + #:use-module (gnu packages calendar) + #:use-module (gnu packages check) + #:use-module (gnu packages compression) + #:use-module (gnu packages cpp) + #:use-module (gnu packages game-development) + #:use-module (gnu packages logging) + #:use-module (gnu packages pretty-print) + #:use-module (gnu packages qt) + #:use-module (gnu packages tls) + #:use-module (gnu packages version-control) + #:use-module (guix build utils) + #:use-module (guix build-system qt) + #: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 (libsodium-komodo)) + +(define komodo-wallet-version "0.7.0-beta") + +;;; Git References + +(define expected-git-reference + (git-reference (url "https://github.com/TartanLlama/expected") + (commit "v1.1.0") + (recursive? #t))) + +(define komodo-wallet-git-reference + (git-reference (url "https://github.com/KomodoPlatform/komodo-wallet-desktop") + (commit komodo-wallet-version))) + +;;; Hashes + +(define expected-hash + (content-hash "17akrv80h0n4cfmxwvlvbb8ycqza7y3qqygjyphv95rrabqm9r02")) + +(define jl777-coins-hash + (content-hash "1icbd6f8nridzc93vz7hsr5dnkrf328zfsw6rrzifc7nvsr559w8")) + +(define komodo-wallet-hash + (content-hash "0pfkgas0xkixf99zqzyri80ksp89b7dw7hbcgpp60ni2cnchxk2n")) + +(define mm2-hash + (content-hash "1bn2sjcrp9ih44h3p96prnwg74aids7fgzcnlv3c68nan6y2lysi")) + +;;; Package Origins + +(define expected-file-name + (git-file-name "libexpected" "1.1.0")) + +(define expected-patches + (search-patches "libexpected-use-provided-catch2.patch")) + +(define expected-origin + (origin (uri expected-git-reference) + (method git-fetch) + (hash expected-hash) + (file-name expected-file-name) + (patches expected-patches))) + +(define jl777-coins-origin + (origin (uri "https://github.com/KomodoPlatform/coins/archive/master.zip") + (method url-fetch) + (hash jl777-coins-hash))) + +(define komodo-wallet-origin + (origin (uri komodo-wallet-git-reference) + (method git-fetch) + (hash komodo-wallet-hash))) + +(define mm2-origin + (origin (uri "https://sdk.devbuilds.komodo.earth/main/mm2_b0fd99e-linux-x86-64.zip") + (method url-fetch) + (hash mm2-hash))) + +;;; Path Constructors + +(define build-deps-prefix "../build/_deps/") + +(define expected-src "expected-src/") + +(define jl777-coins-src "jl777-coins-src/") + +(define mm2-src "mm2-src/") + +(define build-path-mm2 + (string-append build-deps-prefix + mm2-src)) + +(define build-path-jl777-coins + (string-append build-deps-prefix + jl777-coins-src)) + +(define build-path-expected + (string-append build-deps-prefix + expected-src)) + +;;; Phase Definitions + +(define prepare-build-paths + `(string-append "file(MAKE_DIRECTORY \"" ,build-path-expected "\")\n" + "file(MAKE_DIRECTORY \"" ,build-path-jl777-coins "\")\n" + "file(MAKE_DIRECTORY \"" ,build-path-mm2 "\")\n")) + +(define prepare-expected-src + `(string-append "file(COPY " ,expected-origin "/ " + "DESTINATION " ,build-path-expected " " + "NO_SOURCE_PERMISSIONS FOLLOW_SYMLINK_CHAIN)\n")) + +(define prepare-jl777-coins-src + `(string-append "file(ARCHIVE_EXTRACT INPUT " ,jl777-coins-origin " " + "DESTINATION " ,build-path-jl777-coins ")\n" + "file(COPY " ,build-path-jl777-coins "/coins-master/ " + "DESTINATION " ,build-path-jl777-coins ")\n")) + +(define prepare-mm2-src + `(string-append "file(ARCHIVE_EXTRACT INPUT " ,mm2-origin " " + "DESTINATION " ,build-path-mm2 ")\n")) + +(define vcpkg-replacement + `(string-append "\n" + ,prepare-build-paths + ,prepare-expected-src + ,prepare-jl777-coins-src + ,prepare-mm2-src + "\n")) + +(define replace-vcpkg + `(substitute* "CMakeLists.txt" + (("include\\(vcpkg_prerequisites\\)") + ,vcpkg-replacement))) + +;;; Build Arguments + +(define komodo-wallet-configure-flags + '(list "-DFETCHCONTENT_FULLY_DISCONNECTED=ON" + "-Wno-dev")) + +(define komodo-wallet-phases + #~ (modify-phases %standard-phases + (add-after 'unpack + 'delete-vcpkg + (lambda _ #+ replace-vcpkg)))) + +;;; Package Definitions + +(define komodo-wallet-arguments + (list #:phases komodo-wallet-phases + #:configure-flags komodo-wallet-configure-flags)) + +(define komodo-wallet-description + (string-append "Komodo Wallet is a secure wallet and non-custodial " + "decentralized exchange rolled into one application. Store " + "your coins, trade peer-to-peer with minimal fees and never " + "give up control over your digital assets.")) + +(define komodo-wallet-native-inputs + (list boost cpprestsdk date doctest entt fmt git libsodium-komodo + nlohmann-json openssl qtcharts qtdeclarative-5 qttools-5 qtsvg-5 + qtwebengine-5 range-v3 spdlog zlib)) + +(define-public komodo-wallet + (package (name "komodo-wallet") + (version komodo-wallet-version) + (source komodo-wallet-origin) + (build-system qt-build-system) + (arguments komodo-wallet-arguments) + (native-inputs komodo-wallet-native-inputs) + (synopsis "Komodo Wallet Desktop GUI") + (description komodo-wallet-description) + (license license:gpl2) + (home-page "https://atomicdex.io/"))) diff --git a/packages/komodo/libsodium-komodo.scm b/packages/komodo/libsodium-komodo.scm new file mode 100644 index 0000000..b1fe8b9 --- /dev/null +++ b/packages/komodo/libsodium-komodo.scm @@ -0,0 +1,36 @@ +(define-module (libsodium-komodo) + #:use-module (gnu packages crypto) + #:use-module (guix build-system cmake) + #:use-module (guix gexp) + #:use-module (guix packages)) + +(define get-komodo-cmake + (local-file "komodo-libsodium-cmakelists.txt")) + +(define get-komodo-sodiumconfig + (local-file "komodo-libsodium-sodiumconfig.cmake.in")) + +(define copy-komodo-cmake + `(copy-recursively ,get-komodo-cmake + "CMakeLists.txt")) + +(define copy-komodo-sodiumconfig + `(copy-recursively ,get-komodo-sodiumconfig + "sodiumConfig.cmake.in")) + +(define phases + #~ (modify-phases %standard-phases + (add-after + 'unpack + 'add-cmakelists + (lambda _ + #+ copy-komodo-cmake + #+ copy-komodo-sodiumconfig)))) + +(define arguments + (list #:phases phases)) + +(define-public libsodium-komodo + (package (inherit libsodium) + (build-system cmake-build-system) + (arguments arguments))) diff --git a/packages/komodo/vcpkg.scm b/packages/komodo/vcpkg.scm new file mode 100644 index 0000000..260ce19 --- /dev/null +++ b/packages/komodo/vcpkg.scm @@ -0,0 +1,168 @@ +(define-module (vcpkg) + ;; #:use-module (cmake) + ;; #:use-module (gnu packages commencement) + ;; #:use-module (gnu packages compression) + ;; #:use-module (gnu packages cpp) + ;; #:use-module (gnu packages curl) + ;; #:use-module (gnu packages ncurses) + ;; #:use-module (gnu packages ninja) + ;; #:use-module (guix build utils) + #:use-module (guix build-system copy) + #:use-module (guix build-system cmake) + ;; #:use-module (guix build-system qt) + #: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 (nonguix build-system binary) + ) + + +;;; ABSTRACTION -2 + +(define-public vcpkg-tool-cmrc + (let ((version "2.0.1")) + (package + (name "vcpkg-cmrc") + (version version) + (source + (origin + (uri + (string-append + "https://github.com/vector-of-bool/cmrc/archive/refs/tags/" + version + ".tar.gz")) + (method url-fetch) + (hash + (content-hash + "06xpnnwbqv3r8v0vblzcrjp2zgddy05v132y9c9dz8dyl2m5zbgd")))) + (build-system copy-build-system) + (arguments + '(#:install-plan '(("CMakeRC.cmake" "CMakeRCConfig.cmake")))) + (synopsis "A Resource Compiler in a Single CMake Script") + (description + (string-append + "CMakeRC is a resource compiler provided in a single CMake " + "script that can easily be included in another project.")) + (license license:expat) + (home-page "https://github.com/vector-of-bool/cmrc/")))) + +(define-public vcpkg-tool-fmt + (let ((version "10.1.0")) + (package + (name "vcpkg-fmt") + (version version) + (source + (origin + (uri + (string-append + "https://github.com/fmtlib/fmt/archive/refs/tags/" + version ".tar.gz")) + (method url-fetch) + (hash + (content-hash + "02na80r7yrkda89s7mz35llqh904dbsppb7g5s7na9ji5yns7c6y")))) + (build-system cmake-build-system) + (synopsis "A modern formatting library") + (description + (string-append + "{fmt} is an open-source formatting library providing a fast " + "and safe alternative to C stdio and C++ iostreams.")) + (license license:expat) + (home-page "https://fmt.dev/")))) + +;;; ABSTRACTION -1 + +(define vcpkg + (let ((version "2024.02.14")) + (package + (name "vcpkg") + (version version) + (source + (origin + (uri + (string-append + "https://github.com/microsoft/vcpkg/archive/refs/tags/" + version + ".tar.gz")) + (method url-fetch) + (hash + (content-hash + "1wbhxfbi964bc93f69rsr1h6z82ypc9lyz2rb0kp3sfwp0m9jhhf")))) + (build-system copy-build-system) + (arguments + (list + #:install-plan '(list (list "vcpkg" "vcpkg")) + #:phases + #~ (modify-phases + %standard-phases + (add-after + 'unpack + 'unpack-vcpkg-tool + (lambda _ + (invoke "mkdir" "downloads") + (copy-recursively + #+ (origin + (uri + (string-append + "https://github.com/microsoft/vcpkg-tool/archive/" + "2024-02-07" + ".tar.gz")) + (method url-fetch) + (hash + (content-hash + "1j08vw8l8zf6pv6n1kvyjwvj0h7y667shs72sf69hg7p8zj5k9p4"))) + "downloads/2024-02-07.tar.gz"))) + (add-after + 'unpack-vcpkg-tool + 'patch-vcpkg-tool + (lambda* _ + (invoke "chmod" "+w" "downloads/2024-02-07.tar.gz") + (invoke "gunzip" "downloads/2024-02-07.tar.gz") + (invoke + "tar" "-xf" "downloads/2024-02-07.tar" "-C" "downloads" + "vcpkg-tool-2024-02-07/cmake/Findfmt.cmake" + "vcpkg-tool-2024-02-07/cmake/FindCMakeRC.cmake") + (invoke + "tar" "--delete" "-f" "downloads/2024-02-07.tar" + "vcpkg-tool-2024-02-07/cmake/Findfmt.cmake" + "vcpkg-tool-2024-02-07/cmake/FindCMakeRC.cmake") + (substitute* + "downloads/vcpkg-tool-2024-02-07/cmake/Findfmt.cmake" + (("the fmt library\" OFF") + "the fmt library\" ON")) + (substitute* + "downloads/vcpkg-tool-2024-02-07/cmake/FindCMakeRC.cmake" + (("resource compiler\" OFF") + "resource compiler\" ON")) + (invoke + "tar" "-rf" "downloads/2024-02-07.tar" + "downloads/vcpkg-tool-2024-02-07/cmake/Findfmt.cmake" + "downloads/vcpkg-tool-2024-02-07/cmake/FindCMakeRC.cmake") + (invoke "gzip" "downloads/2024-02-07.tar"))) + (add-after + 'patch-generated-file-shebangs + 'bootstrap-vcpkg + (lambda* _ + (substitute* + "scripts/bootstrap.sh" + (("vcpkgDownloadTool=\"ON\"") + "vcpkgDownloadTool=\"OFF\"") + (("\\$actualHash") + "$expectedHash")) + (invoke "./bootstrap-vcpkg.sh" "--disableMetrics"))) + (delete 'configure) + (delete 'build) + (delete 'check)))) + (native-inputs + (list cmake curl ninja unzip vcpkg-tool-cmrc vcpkg-tool-fmt zip)) + (synopsis "C++ Library Manager for Windows, Linux, and MacOS") + (description + (string-append + "Vcpkg helps you manage C and C++ libraries on Windows, Linux " + "and MacOS. This tool and ecosystem are constantly evolving, " + "and we always appreciate contributions!")) + (license license:expat) + (home-page "https://vcpkg.io")))) |