lsp-plugins / lsp-dsp-lib

DSP library for signal processing
GNU Lesser General Public License v3.0
71 stars 18 forks source link

Offline build for packagers #11

Closed fpesari closed 4 years ago

fpesari commented 4 years ago

Hello,

for packagers who need to build everything without an internet connection (e.g. openSUSE packagers who use OBS such as myself) the current system is very hard to use, because make fetch requires that make config is run and that's system-specific.

The best thing for us packagers would be tarball releases with all dependencies included, would that be possible? Else, even being able to run make fetch without make config would be enough, since we could just prepare the tarballs ourselves. Thank you for listening :smile_cat:

sadko4u commented 4 years ago

You may make such trick:

make config TEST=1
make fetch
make clean

And then, again, on the target system:

make config
# Here we already don't need to call `make fetch`
make

The make config command forms the full list of dependencies from the project.mk file which will be automatically fetched by the make fetch using the dependencies.mk file.

This is a workaround solution for current state. I think I need to add something like make fetchall or make tree to make the complete fetch of source code dependencies into the source code tree.

sadko4u commented 4 years ago

@fpesari I've committed changes to github-issue-11 branch: 1733eddab96898583b82e419f9f8a69d85b605a2

Now you're able to fetch all possible dependencies into modules subdirectory and get the source tree portable between different machines.

Please check.

fpesari commented 4 years ago

Thank you, much better now! I will make an openSUSE package soon. Are you planning to ship this feature in a future release or shall I use it as a patch?

sadko4u commented 4 years ago

Yes, I just wanted the feedback from you. Probably @alex-tee would be also interested in this change. I'll ship the new version soon (hours ago or tomorrow).

sadko4u commented 4 years ago

Just shipped the 0.5.7 release.

alex-tee commented 4 years ago

In guix I do it differently, since I can't run any make commands to fetch. I prefetch each dependency manually and place it under modules. This works on Guix:

(define-public lsp-dsp-lib
  (package
    (name "lsp-dsp-lib")
    (version "0.5.6")
    (source
      (origin
        (method git-fetch)
        (uri (git-reference
               (url "https://github.com/sadko4u/lsp-dsp-lib")
               (commit (string-append "lsp-dsp-lib-" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
          "1n5qp9bjsgg1ziy9mqnx034qlzbsp7yl473vk9aigzkyj883dfpj"))))
    (build-system gnu-build-system)
    (arguments
     `(#:tests? #f ; no tests
       #:make-flags
       (list "CC=gcc")
       #:phases
       (modify-phases %standard-phases
         (add-before 'build 'copy-modules
           (lambda* (#:key inputs #:allow-other-keys)
             (copy-recursively (assoc-ref inputs "lsp-common-lib")
                               "modules/lsp-common-lib")
             (copy-recursively (assoc-ref inputs "lsp-test-fw")
                               "modules/lsp-test-fw")
             #t))
         (replace 'configure
           (lambda _
             (invoke "make" "config" (string-append "PREFIX=" (assoc-ref %outputs "out")))
             #t)))))
    (inputs
     `(("lsp-common-lib" ,(origin
         (method git-fetch)
         (uri (git-reference
                (url "https://github.com/sadko4u/lsp-common-lib")
                (commit "lsp-common-lib-1.0.7")))
         (file-name (git-file-name name version))
         (sha256
           (base32
             "1alxv2ryivbj122gryxrrvyicw6zgbdk15wp010lrq6r1nj7mjxh"))))
       ("lsp-test-fw" ,(origin
         (method git-fetch)
         (uri (git-reference
                (url "https://github.com/sadko4u/lsp-test-fw")
                (commit "lsp-test-fw-1.0.5")))
         (file-name (git-file-name name version))
         (sha256
           (base32
             "0n4ircp9bgzwfaa6023bvfsb90qvl2iawbihnwivr5id1js5jq3p"))))
       ))
    (home-page "https://github.com/sadko4u/lsp-dsp-lib")
    (synopsis "Digital signal processing library")
    (description "The LSP DSP library provides a set of functions that perform
SIMD-optimized computing on several hardware architectures.  All functions
currently operate on IEEE-754 single-precision floating-point numbers.")
    (license license:lgpl3+)))

The best thing for us packagers would be tarball releases with all dependencies included

Yes, an actual release tarball that includes them would be best IMO. You could create one for each release and add the tarballs on the github releases page, so a packager would just download and start building right away

sadko4u commented 4 years ago

OK, I think I'll put that to the next release.

sadko4u commented 4 years ago

@alex-tee Created #12 issue for that.