From 4f95e57a96b633e0f30d6a85d8f4aa2cde0dbe00 Mon Sep 17 00:00:00 2001 From: Hans Dijkema Date: Wed, 10 Jun 2026 00:40:14 +0200 Subject: [PATCH] Load versions of libraries. --- ffmpeg-definitions.rkt | 12 ++++++++---- libao-async-ffi-racket.rkt | 5 +++-- libflac-ffi.rkt | 2 +- libmpg123-ffi.rkt | 2 +- opus-encoder.rkt | 6 +++--- opusfile-decoder.rkt | 6 +++--- private/utils.rkt | 28 +++++++++++++++++++++++----- taglib-ffi.rkt | 6 +++--- 8 files changed, 45 insertions(+), 22 deletions(-) diff --git a/ffmpeg-definitions.rkt b/ffmpeg-definitions.rkt index f9fd7a7..33eade1 100644 --- a/ffmpeg-definitions.rkt +++ b/ffmpeg-definitions.rkt @@ -79,20 +79,24 @@ (define libavutil (get-lib (case (system-type 'os) [(windows) '("avutil-60")] - [else '("avutil" "libavutil")]) '(#f))) + [else '("avutil" "libavutil")]) + (ffmpeg-lib-versions 'avutil))) (define libswresample (get-lib (case (system-type 'os) [(windows) '("swresample-6")] - [else '("swresample" "libswresample")]) '(#f))) + [else '("swresample" "libswresample")]) + (ffmpeg-lib-versions 'swresample))) (define libavcodec (get-lib (case (system-type 'os) [(windows) '("avcodec-62")] - [else '("avcodec" "libavcodec")]) '(#f))) + [else '("avcodec" "libavcodec")]) + (ffmpeg-lib-versions 'avcodec))) (define libavformat (get-lib (case (system-type 'os) [(windows) '("avformat-62")] - [else '("avformat" "libavformat")]) '(#f))) + [else '("avformat" "libavformat")]) + (ffmpeg-lib-versions 'avformat))) (define-ffi-definer def-avutil libavutil #:default-make-fail make-not-available) diff --git a/libao-async-ffi-racket.rkt b/libao-async-ffi-racket.rkt index 6a8c015..02b9342 100644 --- a/libao-async-ffi-racket.rkt +++ b/libao-async-ffi-racket.rkt @@ -64,8 +64,9 @@ (define libao (get-lib (list (case (system-type 'os) - [(windows) "libao-1.2.2"] - [else "libao"])) '(#f))) + [(windows) "libao-1.2.2"] + [else "libao"])) + (linux-lib-versions '("4" #f)))) (define-ffi-definer define-ao libao) diff --git a/libflac-ffi.rkt b/libflac-ffi.rkt index 4fd931b..6fe0fca 100644 --- a/libflac-ffi.rkt +++ b/libflac-ffi.rkt @@ -16,7 +16,7 @@ ) -(define lib (get-lib '("libFLAC") '(#f))) +(define lib (get-lib '("FLAC" "libFLAC") (linux-lib-versions '("14" "12" "8" #f)))) (define-ffi-definer define-libflac lib #:default-make-fail make-not-available) diff --git a/libmpg123-ffi.rkt b/libmpg123-ffi.rkt index 728e5d2..0d82ba8 100644 --- a/libmpg123-ffi.rkt +++ b/libmpg123-ffi.rkt @@ -10,7 +10,7 @@ ;(define lib (ffi-lib "/home/hans/tmp/lib/libmpg123.so")) ;(get-lib '("libmpg123") '("0" #f))) - (define lib (get-lib '("libmpg123") '("0" #f))) + (define lib (get-lib '("mpg123" "libmpg123") (linux-lib-versions '("0" #f) '("0" #f)))) (define-ffi-definer define-libmpg123 lib #:default-make-fail make-not-available) diff --git a/opus-encoder.rkt b/opus-encoder.rkt index 8073ec7..3d27a5d 100644 --- a/opus-encoder.rkt +++ b/opus-encoder.rkt @@ -24,19 +24,19 @@ (get-lib (case (system-type 'os) [(windows) '("ogg")] [else '("ogg" "libogg")]) - '(#f))) + (linux-lib-versions '("0" #f)))) (define libopus (get-lib (case (system-type 'os) [(windows) '("opus")] [else '("opus" "libopus")]) - '(#f))) + (linux-lib-versions '("0" #f)))) (define libopusenc (get-lib (case (system-type 'os) [(windows) '("libopusenc")] [else '("opusenc" "libopusenc")]) - '(#f))) + (linux-lib-versions '("0" #f)))) (define _OggOpusComments (_cpointer/null 'ogg-opus-comments)) (define _OggOpusEnc (_cpointer/null 'ogg-opus-enc)) diff --git a/opusfile-decoder.rkt b/opusfile-decoder.rkt index 435339b..c1d9a0d 100644 --- a/opusfile-decoder.rkt +++ b/opusfile-decoder.rkt @@ -28,17 +28,17 @@ (define libogg (get-lib (case (system-type 'os) [(windows) '("ogg")] [else '("ogg" "libogg")]) - '(#f))) + (linux-lib-versions '("0" #f)))) (define libopus (get-lib (case (system-type 'os) [(windows) '("opus")] [else '("opus" "libopus")]) - '(#f))) + (linux-lib-versions '("0" #f)))) (define libopusfile (get-lib (case (system-type 'os) [(windows) '("opusfile")] [else '("opusfile" "libopusfile")]) - '(#f))) + (linux-lib-versions '("0" #f)))) (define _OggOpusFile _pointer) diff --git a/private/utils.rkt b/private/utils.rkt index 6700571..6cd478c 100644 --- a/private/utils.rkt +++ b/private/utils.rkt @@ -14,6 +14,8 @@ until build-lib-path get-lib + linux-lib-versions + ffmpeg-lib-versions do-for dbg-sound info-sound @@ -165,11 +167,27 @@ (define valid-ffmpeg-versions (make-hash (list (list 'avutil 58 60 "libavutil") - (list 'avcodec 60 62 "libavcodec") - (list 'avformat 60 62 "libavformat") - (list 'swresample 4 6 "libswresample") - )) - ) + (list 'avcodec 60 62 "libavcodec") + (list 'avformat 60 62 "libavformat") + (list 'swresample 4 6 "libswresample")))) + + (define (versions-high-to-low from until) + (let loop ((n from) (acc '(#f))) + (if (> n until) + acc + (loop (+ n 1) (cons (number->string n) acc))))) + + (define (ffmpeg-lib-versions kind) + (case (system-type 'os) + [(linux) + (let ((v (hash-ref valid-ffmpeg-versions kind))) + (versions-high-to-low (car v) (cadr v)))] + [else '(#f)])) + + (define (linux-lib-versions versions [default '(#f)]) + (case (system-type 'os) + [(linux) versions] + [else default])) (define (version-str kind) (let ((v (hash-ref valid-ffmpeg-versions kind))) diff --git a/taglib-ffi.rkt b/taglib-ffi.rkt index 0605b0a..f56acfc 100644 --- a/taglib-ffi.rkt +++ b/taglib-ffi.rkt @@ -58,9 +58,9 @@ taglib-append-picture taglib-clear-picture) -(define zlib (get-lib '("zlib" "libz") '(#f))) -(define libtag (get-lib '("tag" "libtag") '("2" #f))) -(define libtag_c (get-lib '("tag_c" "libtag_c") '("#2" #f))) +(define zlib (get-lib '("zlib" "libz") (linux-lib-versions '("1" #f)))) +(define libtag (get-lib '("tag" "libtag") (linux-lib-versions '("2" #f) '("2" #f)))) +(define libtag_c (get-lib '("tag_c" "libtag_c") (linux-lib-versions '("2" #f) '("#2" #f)))) (define-ffi-definer define-tag-c-lib libtag_c #:default-make-fail make-not-available)