From 492045728293d70fdef76fcd715f7ae1b3e35f2b Mon Sep 17 00:00:00 2001 From: Hans Dijkema Date: Mon, 23 Feb 2026 08:20:04 +0100 Subject: [PATCH] Reordering FFI libs --- {libao/lib => lib/dll}/ao-play-async.dll | Bin .../linux-x86_64}/libao-play-async.so | Bin libao/lib/ao-play-async.exp | Bin 1426 -> 0 bytes libao/lib/ao-play-async.lib | Bin 2928 -> 0 bytes libao/libao-async-ffi.rkt | 18 +------ libao/libao-ffi.rkt | 12 +---- libflac/libflac-ffi.rkt | 10 +--- libtag/taglib-ffi.rkt | 39 ++++++++------ play-test.rkt | 7 +-- utils/utils.rkt | 49 +++++++++++------- 10 files changed, 62 insertions(+), 73 deletions(-) rename {libao/lib => lib/dll}/ao-play-async.dll (100%) rename {libao/lib => lib/linux-x86_64}/libao-play-async.so (100%) mode change 100755 => 100644 delete mode 100644 libao/lib/ao-play-async.exp delete mode 100644 libao/lib/ao-play-async.lib diff --git a/libao/lib/ao-play-async.dll b/lib/dll/ao-play-async.dll similarity index 100% rename from libao/lib/ao-play-async.dll rename to lib/dll/ao-play-async.dll diff --git a/libao/lib/libao-play-async.so b/lib/linux-x86_64/libao-play-async.so old mode 100755 new mode 100644 similarity index 100% rename from libao/lib/libao-play-async.so rename to lib/linux-x86_64/libao-play-async.so diff --git a/libao/lib/ao-play-async.exp b/libao/lib/ao-play-async.exp deleted file mode 100644 index 405b745fc6b6b2133937fb3866b2bc1384342ac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1426 zcmbVL%T5$Q6umPI;u9GK-LRO&EHFyHPVL}jvQght6# zvxCq*o^|8nzGwSk2&LUgyK!(L+gfD73#A(s%t*RPVLFK0ZqkmWr~3Yx7q5F}#fchZ z)=dOGf^N|?a8$D@kk4jO4LGLR3~*et7VxTOkASx|dk(y&SsloCYtbt3x@JvaMYA>F z4b7H-cQo4oaugOV1Mh0K4ZNip$My%EbK+8om!Xv>jxP^n=tQo!FOzJTjaAzBoiOOQ z%JH0Ym+5rUAoQJ0iMxyC>3Gh^mPZ46NXwNm9PbD3quV$=qK_Yl-UMExV%1HmGn)^p zYcJPd(-(SLA@9&fKtcy3OhDOS0unkP;fZsb2_2Bg0wQ@Nd6A7s?L}^{`XUHrEY5b^ z3F6cZt6NFx2TC;RjfPlJyGCVq+cb2}5Z1Y*?j|wI6@}SC{jti` z1+`FzEl>3ZcHrZxOZ>_#YIRZAcD+7^`X6<;rhZBcx(?)Gp(AC~cn_67$q zh$}c(j906m9KMb4%kHUCTd$+d5&vrbGD?Hq4=MBXX-H|(=OJZ*z78pi^!-!;(QlAP zZhR7=DUAkD_>otY`!2wg669C{WKwt-;xgDTo79hOM`YD{EE^M(LPNE&V(8hYG0uZXm z^62>FL?$bb+?%?a8J)~dWMrinTPY}OF-2cnRza52)2UP~44%1g43&K_ogR}%hO@)C zF2A&b?~>J0PATVP_O@!>Lh0oqq76pGI5Z1Ed$JJ@%|fV!oKmtOPSwKXby+FPdQL4a zYc|xwYOR=GUC{GS90zb48jjwO9lbEdXD0yA-V89?0f~#@Dv%AHX>C0KPoMvKf6<2(iU~ojN6XEx zKI)oc8o+%NUU0=6C5YVV$!khk>FVQC7f|?uea|#tvVjD>6%#jLnxPeiAo6h>*(Hcp z{5ZB@u2DNzbIhx7K7wfrpN)BdGjJU?H(JN@YN@Cf7s}D@%(ZB0G(Bd{yN1)K(RQc< zrZq_sdxL|g++rM*v6+}8VGv?tMB764 zEA%iMy$j&BsnOtvhxj~3+0{u$q0tQL6YcMcw(f_SH?MZz85^bTdS{TvrmUwUgZjCV zGUz2&%#kwa1T*6(k-mgmIq+&~*mpy`nCAqlzQo(kpFfa*h27hChg6@)-9^<))#q#y zNWA*+HfD`*-?(CqggYT0AH~0&xQ#j~+NhUB(f(orPzh`6F)6)ARP+JxxB?tMBF1O6 z;i?e(YdL4We)`jaj6TNczGaTjn5<=N|GoF|GBWy2M)yTlP1&el2duk>{s);~<3jJ> uZe$EFM$fDAxV&Ot?McfY9)FJ_ZxiEnUB)NDr>9=;5?_$string (system-type 'arch))) +; (subdir (string-append (symbol->string os-type) "-" arch))) +; (list +; (build-path lib-path "lib" subdir "libtag") +; (build-path lib-path "lib" subdir "libtag_c")))))) -(define-ffi-definer define-tag-c-lib - (ffi-lib "libtag_c" '("2" #f) - #:get-lib-dirs (lambda () - (cons (build-path ".") (get-lib-search-dirs))) - #:fail (lambda () - (let ((path (get-lib-path "tag_c.dll"))) - (ffi-lib path))) - )) +;(define (get-lib l) +; (ffi-lib l '("2" #f) +; #:get-lib-dirs (λ () +; (cons (build-path ".") (get-lib-search-dirs))) +; #:fail (λ () +; (error (format "Cannot find library ~a" l))) +; )) + +(define libtag (get-lib '("tag" "libtag") '("2" #f))) +(define libtag_c (get-lib '("tag_c" "libtag_c") '("#2" #f))) +(define-ffi-definer define-tag-c-lib libtag_c) (define TagLib_File_Type (_enum '( diff --git a/play-test.rkt b/play-test.rkt index e9ae00f..7321506 100644 --- a/play-test.rkt +++ b/play-test.rkt @@ -1,7 +1,8 @@ #lang racket/base -(require "libao/libao.rkt" - "libflac/flac-decoder.rkt" - data/queue +(require ;"libao/libao.rkt" + ;"libflac/flac-decoder.rkt" + ;data/queue + racket-sound ) (define test-file3 #f) diff --git a/utils/utils.rkt b/utils/utils.rkt index a71ac5b..67b1b1e 100644 --- a/utils/utils.rkt +++ b/utils/utils.rkt @@ -1,8 +1,15 @@ (module utils racket/base + (require racket/path + racket/runtime-path + ffi/unsafe + setup/dirs + ) + (provide while until - get-lib-path + build-lib-path + get-lib do-for ) @@ -47,23 +54,27 @@ (do-for-f)))))) (do-for-f)))))) - (define (get-lib-path lib) - (let ((platform (system-type))) - (cond - [(eq? platform 'windows) - (let ((try1 (build-path (current-directory) ".." "lib" "dll" lib)) - (try2 (build-path (current-directory) "lib" "dll" lib))) - (if (file-exists? try1) - try1 - try2) - )] - [(eq? platform 'unix) - (let ((try1 (build-path (current-directory) "lib" lib))) - (when (file-exists? try1) - try1))] - [else - (error (format "Install the shared library: ~a" lib))] - ))) - + (define-runtime-path lib-path "..") + + (define (build-lib-path) + (let ((os-type (system-type 'os*))) + (if (eq? os-type 'windows) + (build-path lib-path "lib" "dll") + (let* ((arch (symbol->string (system-type 'arch))) + (subdir (string-append (symbol->string os-type) "-" arch))) + (let ((path (build-path lib-path "lib" subdir))) + path))))) + + (define (get-lib* libs-to-try orig-libs versions) + (if (null? libs-to-try) + (error (format "Cannot find library, tried ~a" orig-libs)) + (ffi-lib (car libs-to-try) versions + #:get-lib-dirs (λ () (cons (build-lib-path) (get-lib-search-dirs))) + #:fail (λ () (get-lib* (cdr libs-to-try) orig-libs versions)) + ))) + + (define (get-lib libs-to-try versions) + (get-lib* libs-to-try libs-to-try versions)) + ) ; end of module