From 0ed07921a84ddd196c8f1db0e9f9e74b59f4113f Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 12 Oct 2023 18:16:04 +0200 Subject: [PATCH] macOS packaging details Signed-off-by: falkTX --- Makefile | 68 ++++++++++++++++++-------------------- PawPaw | 2 +- mod-plugin-builder | 2 +- systray/Makefile | 8 ++--- systray/main.cpp | 23 ++++++++++--- systray/mod-app.hpp | 4 +++ systray/mod-logo.icns | Bin 0 -> 104214 bytes utils/Info.plist | 29 ++++++++++++++++ utils/macos-dmg.sh | 43 ++++++++++++++++++++++++ utils/macos-readme.txt | 9 +++++ utils/plugin-builder.mk | 34 +++++++++---------- utils/plugin-builder.sh | 10 ++++-- utils/test.sh | 35 +++++++++++++------- utils/win64-installer.iss | 2 +- 14 files changed, 190 insertions(+), 79 deletions(-) create mode 100644 systray/mod-logo.icns create mode 100644 utils/Info.plist create mode 100755 utils/macos-dmg.sh create mode 100644 utils/macos-readme.txt diff --git a/Makefile b/Makefile index 1ffda7a..7c43350 100644 --- a/Makefile +++ b/Makefile @@ -52,10 +52,14 @@ BOOTSTRAP_FILES = \ TARGETS = build-ui/lib/libmod_utils$(SO_EXT) ifeq ($(MACOS),true) +TARGETS += build/mod-app.app/Contents/Info.plist TARGETS += build/mod-app.app/Contents/Frameworks/QtCore.framework TARGETS += build/mod-app.app/Contents/Frameworks/QtGui.framework +TARGETS += build/mod-app.app/Contents/Frameworks/QtOpenGL.framework +TARGETS += build/mod-app.app/Contents/Frameworks/QtPrintSupport.framework TARGETS += build/mod-app.app/Contents/Frameworks/QtSvg.framework TARGETS += build/mod-app.app/Contents/Frameworks/QtWidgets.framework +TARGETS += build/mod-app.app/Contents/MacOS/lib TARGETS += build/mod-app.app/Contents/MacOS/libjack.0.dylib TARGETS += build/mod-app.app/Contents/MacOS/libjackserver.0.dylib TARGETS += build/mod-app.app/Contents/MacOS/jackd @@ -70,14 +74,15 @@ TARGETS += build/mod-app.app/Contents/MacOS/mod-screenshot TARGETS += build/mod-app.app/Contents/MacOS/mod-ui TARGETS += build/mod-app.app/Contents/MacOS/mod TARGETS += build/mod-app.app/Contents/MacOS/modtools -TARGETS += build/mod-app.app/Contents/PlugIns/bearer/libqgenericbearer.dylib TARGETS += build/mod-app.app/Contents/PlugIns/generic/libqtuiotouchplugin.dylib TARGETS += build/mod-app.app/Contents/PlugIns/iconengines/libqsvgicon.dylib TARGETS += build/mod-app.app/Contents/PlugIns/imageformats/libqsvg.dylib +TARGETS += build/mod-app.app/Contents/PlugIns/LV2 TARGETS += build/mod-app.app/Contents/PlugIns/platforms/libqcocoa.dylib TARGETS += build/mod-app.app/Contents/PlugIns/styles/libqmacstyle.dylib TARGETS += build/mod-app.app/Contents/Resources/default.pedalboard TARGETS += build/mod-app.app/Contents/Resources/html +TARGETS += build/mod-app.app/Contents/Resources/mod-logo.icns else TARGETS += build/jackd$(APP_EXT) TARGETS += build/jack/jack-session.conf @@ -101,7 +106,6 @@ TARGETS += build/Qt5Core.dll TARGETS += build/Qt5Gui.dll TARGETS += build/Qt5Svg.dll TARGETS += build/Qt5Widgets.dll -TARGETS += build/bearer/qgenericbearer.dll TARGETS += build/generic/qtuiotouchplugin.dll TARGETS += build/iconengines/qsvgicon.dll TARGETS += build/imageformats/qsvg.dll @@ -118,20 +122,17 @@ endif # --------------------------------------------------------------------------------------------------------------------- -# FIXME *.so extension -ifneq ($(MACOS),true) BUNDLES = abGate.lv2 -endif BUNDLES += artyfx.lv2 -BUNDLES += carla-files.lv2 ifneq ($(MACOS),true) +# FIXME crashes on load +BUNDLES += carla-files.lv2 +endif BUNDLES += DragonflyEarlyReflections.lv2 BUNDLES += DragonflyHallReverb.lv2 BUNDLES += DragonflyPlateReverb.lv2 BUNDLES += DragonflyRoomReverb.lv2 -# FIXME *.so extension BUNDLES += fil4.lv2 -endif BUNDLES += Black_Pearl_4A.lv2 BUNDLES += Black_Pearl_4B.lv2 BUNDLES += Black_Pearl_5.lv2 @@ -159,20 +160,13 @@ ifneq ($(MACOS),true) # BUNDLES += fomp.lv2 endif BUNDLES += Kars.lv2 -ifneq ($(MACOS),true) -# FIXME *.so extension BUNDLES += midifilter.lv2 -endif BUNDLES += midigen.lv2 -# FIXME *.so extension BUNDLES += mod-bpf.lv2 BUNDLES += MOD-CabinetLoader.lv2 BUNDLES += MOD-ConvolutionLoader.lv2 -# FIXME *.so extension BUNDLES += mod-gain.lv2 -# FIXME *.so extension BUNDLES += mod-gain2x2.lv2 -# FIXME *.so extension BUNDLES += mod-hpf.lv2 BUNDLES += mod-mda-BeatBox.lv2 BUNDLES += mod-mda-Degrade.lv2 @@ -189,37 +183,29 @@ BUNDLES += mod-mda-Shepard.lv2 BUNDLES += mod-mda-SubSynth.lv2 BUNDLES += mod-mda-ThruZero.lv2 BUNDLES += mod-mda-Vocoder.lv2 -ifneq ($(MACOS),true) -# FIXME *.so extension BUNDLES += modmeter.lv2 -# FIXME *.so extension +ifneq ($(MACOS),true) +# FIXME fails to build: implicit declaration of function '__atomic_store_4' BUNDLES += modspectre.lv2 endif BUNDLES += MVerb.lv2 BUNDLES += Nekobi.lv2 BUNDLES += neural_amp_modeler.lv2 ifneq ($(MACOS),true) +# FIXME fails to build: implicit declaration of function 'basename' BUNDLES += notes.lv2 endif BUNDLES += PingPongPan.lv2 -ifneq ($(MACOS),true) # FIXME plugin binary missing (win32 RUNTIME vs LIBRARY) BUNDLES += rt-neural-generic.lv2 -endif -# FIXME *.so extension -ifneq ($(MACOS),true) BUNDLES += tinygain.lv2 -endif BUNDLES += wolf-shaper.lv2 # TODO check -ifneq ($(MACOS),true) BUNDLES += Harmless.lv2 BUNDLES += Larynx.lv2 BUNDLES += Modulay.lv2 BUNDLES += Shiroverb.lv2 -endif - # TODO build fails # BUNDLES += mod-ams.lv2 @@ -292,10 +278,6 @@ build/Qt5%.dll: $(PAWPAW_PREFIX)/bin/Qt5%.dll @mkdir -p build ln -sf $(abspath $<) $@ -build/bearer/q%.dll: $(PAWPAW_PREFIX)/lib/qt5/plugins/bearer/q%.dll - @mkdir -p build/bearer - ln -sf $(abspath $<) $@ - build/generic/q%.dll: $(PAWPAW_PREFIX)/lib/qt5/plugins/generic/q%.dll @mkdir -p build/generic ln -sf $(abspath $<) $@ @@ -362,6 +344,10 @@ build/modtools: mod-ui/modtools # --------------------------------------------------------------------------------------------------------------------- +build/mod-app.app/Contents/Info.plist: utils/Info.plist + @mkdir -p build/mod-app.app/Contents + ln -sf $(abspath $<) $@ + build/mod-app.app/Contents/Frameworks/Qt%.framework: $(PAWPAW_PREFIX)/lib/Qt%.framework @mkdir -p build/mod-app.app/Contents/Frameworks ln -sf $(abspath $<) $@ @@ -375,7 +361,7 @@ build/mod-app.app/Contents/MacOS/jackd: $(PAWPAW_PREFIX)/bin/jackd$(APP_EXT) ln -sf $(abspath $<) $@ build/mod-app.app/Contents/MacOS/lib: build-ui/lib - @mkdir -p build/mod-app.app/Contents/MacOS/ + @mkdir -p build/mod-app.app/Contents/MacOS ln -sf $(abspath $<) $@ build/mod-app.app/Contents/MacOS/libjack%: $(PAWPAW_PREFIX)/lib/libjack% @@ -418,10 +404,6 @@ build/mod-app.app/Contents/MacOS/modtools: mod-ui/modtools @mkdir -p build/mod-app.app/Contents/MacOS/ ln -sf $(abspath $<) $@ -build/mod-app.app/Contents/PlugIns/bearer/libq%.dylib: $(PAWPAW_PREFIX)/lib/qt5/plugins/bearer/libq%.dylib - @mkdir -p build/mod-app.app/Contents/PlugIns/bearer - ln -sf $(abspath $<) $@ - build/mod-app.app/Contents/PlugIns/generic/libq%.dylib: $(PAWPAW_PREFIX)/lib/qt5/plugins/generic/libq%.dylib @mkdir -p build/mod-app.app/Contents/PlugIns/generic ln -sf $(abspath $<) $@ @@ -434,6 +416,11 @@ build/mod-app.app/Contents/PlugIns/imageformats/libq%.dylib: $(PAWPAW_PREFIX)/li @mkdir -p build/mod-app.app/Contents/PlugIns/imageformats ln -sf $(abspath $<) $@ +build/mod-app.app/Contents/PlugIns/LV2: build/plugins + @mkdir -p build/mod-app.app/Contents/PlugIns + @mkdir -p build/plugins + ln -sf $(abspath $<) $@ + build/mod-app.app/Contents/PlugIns/platforms/libq%.dylib: $(PAWPAW_PREFIX)/lib/qt5/plugins/platforms/libq%.dylib @mkdir -p build/mod-app.app/Contents/PlugIns/platforms ln -sf $(abspath $<) $@ @@ -450,6 +437,10 @@ build/mod-app.app/Contents/Resources/html: mod-ui/html @mkdir -p build/mod-app.app/Contents/Resources ln -sf $(abspath $<) $@ +build/mod-app.app/Contents/Resources/mod-logo.icns: systray/mod-logo.icns + @mkdir -p build/mod-app.app/Contents/Resources + ln -sf $(abspath $<) $@ + # --------------------------------------------------------------------------------------------------------------------- build/mod-screenshot$(APP_EXT): build-screenshot/mod-screenshot$(APP_EXT) @@ -506,9 +497,14 @@ systray/mod-app$(APP_EXT): systray/main.cpp systray/mod-app.hpp # --------------------------------------------------------------------------------------------------------------------- +.KEEP: $(BUNDLES:%=$(PAWPAW_PREFIX)/lib/lv2/%/manifest.ttl) + build/plugins/%: $(PAWPAW_PREFIX)/lib/lv2/%/manifest.ttl @mkdir -p build/plugins - ln -sf $(subst /manifest.ttl,,$(abspath $<)) $@ + rm -f $@ + ln -s $(subst /manifest.ttl,,$(abspath $<)) $@ + touch $(PAWPAW_PREFIX)/lib/lv2/$*/manifest.ttl + touch $@ $(PAWPAW_PREFIX)/lib/lv2/abGate.lv2/manifest.ttl: $(BOOTSTRAP_FILES) ./utils/plugin-builder.sh $(PAWPAW_TARGET) abgate diff --git a/PawPaw b/PawPaw index 9cc1f92..19d47d4 160000 --- a/PawPaw +++ b/PawPaw @@ -1 +1 @@ -Subproject commit 9cc1f92660bd0754c778bb300cc32236ede613d4 +Subproject commit 19d47d49f18cd5380a99cf053ea0cc4345c20463 diff --git a/mod-plugin-builder b/mod-plugin-builder index c7ffed9..f0ea333 160000 --- a/mod-plugin-builder +++ b/mod-plugin-builder @@ -1 +1 @@ -Subproject commit c7ffed91a993e2159dea0d96f8b00bdbd0be4f99 +Subproject commit f0ea3334ba0b7042c8f7dab4f83154254b887336 diff --git a/systray/Makefile b/systray/Makefile index da4bcca..0800414 100644 --- a/systray/Makefile +++ b/systray/Makefile @@ -83,10 +83,10 @@ $(TARGET): $(OBJS) @$(shell mkdir -p $(@D)) $(CXX) $^ $(LDFLAGS) $(QT5_LIBS) -o $@ ifeq ($(MACOS),true) - install_name_tool -change "@rpath/QtCore.framework/Versions/5/QtCore" "@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore" $@ - install_name_tool -change "@rpath/QtGui.framework/Versions/5/QtGui" "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" $@ - install_name_tool -change "@rpath/QtSvg.framework/Versions/5/QtSvg" "@executable_path/../Frameworks/QtSvg.framework/Versions/5/QtSvg" $@ - install_name_tool -change "@rpath/QtWidgets.framework/Versions/5/QtWidgets" "@executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets" $@ + install_name_tool -change "@rpath/QtCore.framework/Versions/5/QtCore" "@executable_path/../Frameworks/QtCore.framework/QtCore" $@ + install_name_tool -change "@rpath/QtGui.framework/Versions/5/QtGui" "@executable_path/../Frameworks/QtGui.framework/QtGui" $@ + install_name_tool -change "@rpath/QtSvg.framework/Versions/5/QtSvg" "@executable_path/../Frameworks/QtSvg.framework/QtSvg" $@ + install_name_tool -change "@rpath/QtWidgets.framework/Versions/5/QtWidgets" "@executable_path/../Frameworks/QtWidgets.framework/QtWidgets" $@ endif main.cpp.o: main.cpp mod-app.hpp qrc_mod-app.hpp ui_mod-app.hpp diff --git a/systray/main.cpp b/systray/main.cpp index 95d536a..36f6a79 100644 --- a/systray/main.cpp +++ b/systray/main.cpp @@ -12,6 +12,7 @@ static const WCHAR* user_files_dir = nullptr; #else #include +#include #include #include #include @@ -93,7 +94,7 @@ int main(int argc, char* argv[]) return 1; } - #ifdef _WIN32 + #ifdef _WIN32 WCHAR path[MAX_PATH + 256] = {}; GetModuleFileNameW(GetModuleHandleW(nullptr), path, sizeof(path)/sizeof(path[0])); @@ -121,7 +122,7 @@ int main(int argc, char* argv[]) std::wcscat(path, L"\\user-files"); _wmkdir(path); user_files_dir = path; - #else + #else char path[PATH_MAX + 256] = {}; Dl_info info = {}; @@ -140,12 +141,26 @@ int main(int argc, char* argv[]) char lv2path[(PATH_MAX + 256) * 2] = {}; std::strncat(lv2path, path, pathlen); + #ifdef __APPLE__ + std::strcat(lv2path, "/../PlugIns/LV2:"); + #else std::strcat(lv2path, "/plugins:"); + #endif + if (const char* const home = getenv("HOME")) + std::strncpy(path, home, sizeof(path)); + else if (struct passwd* const pwd = getpwuid(getuid())) + std::strncpy(path, pwd->pw_dir, sizeof(path)); + else + return 1; + + #ifdef __APPLE__ + std::strcat(path, "/Documents/MOD App"); + #else // TODO fetch user docs dir std::memcpy(path + pathlen, "/data", 6); + #endif - // std::strcat(path, "/MOD App"); mkdir(path, 0777); setenv("MOD_DATA_DIR", path, 1); @@ -163,7 +178,7 @@ int main(int argc, char* argv[]) sigemptyset(&sig.sa_mask); sigaction(SIGTERM, &sig, nullptr); sigaction(SIGINT, &sig, nullptr); - #endif + #endif app.setQuitOnLastWindowClosed(false); diff --git a/systray/mod-app.hpp b/systray/mod-app.hpp index be3a369..4d28539 100644 --- a/systray/mod-app.hpp +++ b/systray/mod-app.hpp @@ -778,7 +778,11 @@ private slots: { case QSystemTrayIcon::DoubleClick: case QSystemTrayIcon::MiddleClick: + #ifdef Q_OS_MAC + show(); + #else setVisible(!isVisible()); + #endif break; default: break; diff --git a/systray/mod-logo.icns b/systray/mod-logo.icns new file mode 100644 index 0000000000000000000000000000000000000000..85e9281dc4b416399271ffea667a4cd3ecd9a896 GIT binary patch literal 104214 zcmeI52fSTHoyTuP2q*%AG(i$T1VI5Svg# zB8Y$#0g-pp3k1>&A><{b5>iMdc}dRxzVpr;=FFXQ&$;*AR}$WQ?*E=Mb7ubYpZ=f! z{AZ?A>Q(Ap+G?wko_$N-es`&KNvTxYZo4-7R-2YeugYzQ9ope%r$7BHz&maVyLXlFn{2k(X4jp1>Z#8ySg>Hxnl)?Yy#D&@ zF9N*d_SLU`^*Q+g&n6z8O}5-}%Lj%H8#a02!i8gwIO2%Wy?XUpCqEIuJ8pa%Jb3U# z`F+sELA->0;e{6lY`pQttruKyLG-)d{Vw|b?|*NA_w&y`KjPcSks}8T88T#2Ob29q z?6lKPdrr7VD~+xH`mg^QJ^%dk(I-CfiRgd+=YOKzcH1rb$VWaBDO_~mfd@wTfezB5 zuzSmXo$QOh_{A@dkv%%>u*0H#8 zVYGDV(rCbd0nxg3>mm&K&o{uOUuAN=n}2*KzFTj-)%cw}d2%#;`t<0UYpzMcEC0q& zpOk;prH`L}`sviU(Hm{F(Ha|Gb-|R|;>C+i{Qdg%GvRIdQBUP}A3^E8?|ttLBSwsP zSug+`haY};G-k}0=!6qah^9`RYTi}8rtGO>)HUiHVPmt&```cm2fzUxwl3&fLbJ+X zjM6!pu+(*Zt7rqF<9gDvXwjlKsS}h7z&m+FJ&oh_!&*9cew;cOXq5f&bmNTYrQhEd7kSCxe*&4Rb?p^C}>s>Fs=RNNk z5AZIxhXiK{@Ke;N2QB@yckkZg&OZC>^0;y1rkM)h{HbhT<(vGBm*1ZV)C*TNJE>j_ z`S!QJU0x+4RI61kBmelvKQ^n44FY(ltn{t*EtzxAJ-4iSK3G_H%D}vn>i(FgpMH9b z!mLyOGO$mdKC|UFsWa|--@bikjUGLEAby{G^2yN(J2rrOGw6(QuK3UY{Ldla*m>uj zqoa>LIy&j3lTv`&PCM;n;`_l5elS?LSAsjH+s%{9NIP+V|NGw`1Wx+N)vH%W>Pw@4 z{No=fz>RF8zr?S?3?nRgB0Kqw*?QAWHyuxYl6KjR-^(w*Jeo9Vl6gP#%ri|tZol!I zGG&VC*R0#9QKJTu-*H(|PtG~-yz`)S^)9>YGROM6;)*LG<)6WO(@i%;EiEnP-F{a+ ziT>-q{wr}KzrjI0kss>d!|GS3&6zW2qz%KfR=k8!-#L;xsP~6d&qpbq=c z!3QJybQg$6Wt_t4=Y#BzOqejCMdkK_n-9GI_kaI4$%?2Cs-w}eWy_46KkA|HpEgf_ zBKN-v&Q(2Yme*Au`p}2wx_&7y%r@I>V{p(OFn|5)U!yCpyfTHCHm^@^J)>QWqg^o8 zgz$d+;~$SU*<_RG<(FSJcr`v$;H6E0gEl4{w*S0beg-}0Q$NSi0^!nuxqkUm!5Gy7oTBu~gIg;_;CQ5{bD zb=oCuUf)*ZhqT9ZX5qB7la9;DfBGZppm3xNZuE(98C@p-e%dXr&~s}!o+EgKK7@7& z@GiH9<8Sy0nl+_0rNyPsms(0Ym&&EhOHG;_07Z@UPgrn(3!Lx+n#zR>?Q)X(!j-mAcxQg0ak3dd@_UOQ zubeFnN2^{;)fh5B?Qsn_*REYVSL4hu@xlE8-sLurZ}?HWfZt>s&Zd-m)X;3t(QYZWS~`@G}EH|jBd73XY)r4P6uBZi~(ee7}>d0(bBZrZMoH)N07 zEk!0_~=ug`jmlx|M!27#DhmK zzW8F2Z*e;4r{F_=FTm`gI`A^(G;7wZ=Ved)D{rH#uDZ(D|Ms`PCH#u@^Xp&#I+{6i zX5t@r$^%^DQ>a(e-Sba5<&vztyf=tHOY5yTl`mFeYJW2zyJHcNPTybHonvU`}u>r z%6Qm{6)RTioi;z6^b8s_s6XFa=-e2K2V{`%U!@qHg#*Q7E z!cU*b7x9bmW48*d*;)L>)EP5o%+=>*>RTr0g9-bGKm5TULk4xpC6}0Y`)6ev_@z%I zEPW(>rQF>9jd+fcykM-_#R|z%mf3Wuyo{{pqaXdK;g6B?0LXt-9}ErRYp4Xv=${!s zgzIP!2FwM-5vPN;If60|)hpciMxRJ}pgYE$HNM#Bjv=qa{|=-hA*_mPuG&X3KJt!R z{A~?=dz>d(bX(l^xwBqwqh3kA(@guI4T2BDJ8ty5^zHIXSrVpJvx@>yhyN~^tg@H^ z=$*EMo2lP=W}0=SD@t#b`iO7ZQv6eI@n9Q?|LSERGm!Ve`X?+nzy(fl!-w@194tuq zFa*N&oA)W`$%5Yrh6&~gR>iJugc z4?XnIi@2%Z94J2v_uIo#WwXj_%4_{WcEdvW{i zw|_xl$)BqQn+j?%yUX)v`ZA3RhL5umsp%|`EO)TRq2?QIxS>D5J8pcl{&@cBPk(w| z{KhN7g)D8if&}a*e{&`O7`9}|l4L>*?<%?QD7D8m`kv|^t(|Z9!LOy`%{Sj%syQxo zW3B+))ePyLE1s`x`v~zEQyDwt9*i@~9T~ft`&8%vm-^Xea0{~XfiilDblbS;2e;a4 ztHm}By+_QwEidUm`Gz0I|5D*F z-+iog7&^dV`)bNUaZn$w7Py8sw)!uB`3v)0=HjyL6Ia4<$<;LDFa_Ent}P-n3;wofKZ$h1)i7qm7wJ^r!K7w2hl5yd=ir+-IMC%-lh9 z^CS-IUvq8a_ZPqTMd};%!F5WzRVMBy>8o$qfB*eW zp{edHuyw8@;s>{yf$5{@s}%=h$q4u==n_wcygZe5?0)*0(_w1Oe{e~*jGUXf-T>L* z3Fq6g7q8rmA0MndkNE}PwAK^->}NlVPCW6%3cs3%g1$l?XK~V3^PTZaZe|RH=f+KQ zj?Wd>U;3 zLtOB3`VK#7`d?cILjA8Fzq^jDG0R48)-90XXT@*(UwAp;r2mDd#oWH*jyu}%hxttf zzu~5zwP1xYfGol{q4?Dvndce9Sf}vtwASpYm(}pGc+mL!isoZWTmr^?*Ywlc^2^FU!}GcPhddd6g89BR(mjZ7zx{S= zO`gozRnL<6sdM1M1H279j_|=(`v(4N)ULbk3jbx41_-BoNcgXhee7e=%{Sj{WF{KJ zBh7_V@{`~E<~I?%f$$hmx|eEBYxpmXZEHpIAbmsD7UI9;Y~Uw32x#bF5)Eay@Z!ad8VM3kyz-(of*j5K(oDYG3Hz^_`6`T zV4;9KWKP06ZhXTJ{4rs=(tJRXUnm$RNcB0YYjf2`C##FbPV9^LC0>%}+Cl%J}! z=6#nA;%mq#J^bj1PN1$rgP_(l9H%gApdH;T7dK@u{Y}#r@@T8&yYzlXiqA>aD|CY5 zG*Avj>(WQ$cL{ZdxwuQa=G0@jh=}$;?WX6=vZ1KSzzMs;}QR3y+z1< z{O{K8_N|Q5F|Wbc;PQMI;U9h`K`Na$?QzKL-?QjP$KM+CA}k&Lvnc%yLh2>lTspfg^OoyLA=zTt=W?UJ8a?~!y;a^v^Iv*u|HYry_@ z-@f9+AnKjCeLOJ(e| z-@5uwi&yQ)=zi8vZH!m;eM$$Xa5~)nQ!+BQ{|t>^Re2vvJ5TuidJTJpTwK-OT^`6A zzfL1uyf@2`BK~0}V|F!s_8U4au0g-Tt^w0W+I^m`ANzjSU3V3t-{&8YKgRLHKQNbJ zzVp1r%QLjsGY*rA(_N>u``cW9T9p=%H2k_rqgHMrLt{e`aige@53JoZ`JFq${a)_iAyz6I$=Ki@a# zTI1hc7x(>OzxUpIgE$GRHj3^=B2Pr_E!vR%vHlQ}pUBzlp^XkW;DChJCLZ>l`|>OK zHE|=m@l8?s(KE1k+$V7%t90=qyN~@`qGy&terR}y|NYEj@%pBJ#h)B@5c!mVQAB4 z98;OjWsGyjX&ZmNPjDgkrmiX;Xs4g~h@g>X6CwMFfU%qP>(}6yq?eWOe6`XqUTi)x zW8~i8jB&GuLR=kX7^j)@pr=QiMh}Sj12Q~U4(6waZ}>r0DSrJ0g@um<2e{y0b`o@! zfq%M40PhVA2_O&CnJ<%&aR9u_Eu_COBF5qKVsh?O13z-AfO26z{fc0rV08?<ZA3=F=kjTERF$A$f`XQN%tFcC4VE;8TL`Y~Cm0ek7PA@YAtYeDQSYS&xtmsEkgT z_~ikt{{y_^#y81hpO@bm!V${1iE{s;fVjGgdA|txxqv#Hq#J(ZzylBLFCFKh+GnxA zAM^6;gn{2<&L~{Io&a%ODcDNTRpwoa_#A=djYxazo_p>&So7!SHD}1(dzqI9_B*(= zm*aWi9-=tt8f`w4FJ}qV<94dqU9mxnrDK)OZ5tpt;dD!LM?Iyt-6EY6cxlFP8~>(Y@KrTM|DHKcc~igUKsXr@SBJ`Ug=H{n=Y6pwVcUeUbT<fr^+;rJS#&F1bCI!gCYRBmhv zPt!ybk#xTFXwsh6~)Yv&!>oe$b ztZ0iW{jWB(a#!s^v2?~Xw>J-{M|WDB|MD;Y(qDBl*haN)XN2U!Gpyf^dLkQ=j4&mG zv^k-+wuUj+iTggi({AfE*D0VWGtzG3ai7|Dv`puP46^<@>nWKzeUI7u<?x<)$C?)c2SwifeYd1gF` z)UQkkwRg!Z#!6<4o<^`ub6%eIp+!2Ar_kDeNIw95N!CoW_Je zb($4E%bhx}qok7bsO<&gx8dV)A@R?PcrnV%&KIuKd&q1d$3+6h4_DXQ;L`f~aK2>$ z{he#r3*h@@KQL#Evu}X!;)g5z_+hZ)-!oJG>lxxKE@`Nvgp+Bnf0bxmIS2^aIqZZOXH zw>$xIB-eaa7DJ14Hq(_&+xy|Y?f0x_cT0b)*O;mU$WR>mKdEO1{g6@`n=#1x$NgdGoWUC`fL#ArYc)f7`Xa$dd%rVD|;#(ec$MkFNTrq|_a|7nf znC%2c*81Du{x&tQQdO8;bpGBQ(+}-RL!zrgML?#i^irOrnY5o6+t-S}O0Bsf!-&7F zm*o%bu?|Gi29PVu-O6N6(0dd9By*pZc#2=(CHPhZx?}l6H?lN8UGe$?>AFIIj3Cl^ zEfqY2bfc#5tq9bUe$FQFP+&*NcjSj}I}-4_-&`6j)NAZ{DRf6|ZJ@I2A8i2Y2{)68XAgLD08&QZAT+xUEa zKhBaC-)-(>;$Eg&0ewNv-gS-U^fjd&+B9cRZ3vdUZa_>k@*CEmIh!lR_i7&R%99Jl z$(Ae{V?osjKM4Ys#I()u^p-6m|D}XKAwH) zDV-7Y(kzX7eoEk)$+AQ`BOo;oAnqrgc%sa=qR@!+b1xtF&uVWHB-EUK>7g{6fX*Mf zd2t$$_50=$IgrNH(y#E>KbA=cpfEoeNpfnj^M|#tNMv*7D=9 z=<2>-P|bW(A5A>EH>;vA)Lilv-4mJUe_Frp(_agA(^*gY;r}?3&W*!=Xa6SpNN!xb zqoe8gMPE73yh|R;TDN2ki=|uW_l4+qjFtQ@sQ;p{hEDe!G?%7&($Af87H{Z@{tG%e zZalox=P3IEp)XCNa92PCPE3E9aU_FZsSpVCWX!k5P=659unb=w>^3p&8m6VZd{rz|gEdaiZoW@R(U<1@lJc&gy^7+PV!}%ai##d#;hg zD58`uha0i()@%_?V;tP~>b+5E7b;_@M@fIc*cjpuT)KD{e>aPHD6%xsCH)?5x{3V;p#C@9nMgLXl}s&=;d8rzd)nO5UiJ5N#Q5O4gcL zT3>sabs5HO-f@%vV$85SYHi?EjUiT!NxB)YPZe~Afj<}~u;us`bEd$&F(V7=cSbi4 z{Y1rW`FUtSruAV#XBz6*Hw7*av>N%rpa1-4&YZ5`7wSzl6$ZUDbn_ISox_su`GRu= z9a-OnzN%r)^h*KrN?RX{E*U%nGF8qPt~Kq1QP^SVWTBVl;?_Iu?-zot1>MCUKR||J zFdh!@ftxspt2>*|ia5rK2?94C z>Ul>u5BouEUF+NDYeqhYxZ z&oT!K$Pld_Z3hvU&&C6-Tqil;&3J6$*{jXF0>JFZTw$LkxQ-@Z(3j!98jQIlif0Qp zorKV$KbhWT^C)fPKbzXzd-=~c=dSzr>9O{58%Y)EXlZlrZJ&OA*nG12X7kZLO|eig zO(0UfmwBqdY`GW&ecmoNTaHP&+H!6y_q`Ol2^78f_2o@QmJQ#K$Xx|T3C_>YJ8m-t_$dqiEVxDhjw1!&d`D!U(z!mFoki@)f*S4)j)Zw8xtSlLU<}<67}e6b&~Dju1dwk7;}kY%G+=2<{PBxp%GQ z)EWL6t?w3mS@3Q_k7-{Hd{n_1ziZM{kpGIZmMm$3k0;{{So2V~XbhJk}QlPYGa;E6TEp+gp;Cj%QCOXDzZXPV&a7T1!dki!cky zGlY@+Zz?#Xvr+~pxD_{?cr7%Mh9?Dw33^O+4p8pL3q}cw=5H(Vah1I!5z+-~Ea$n1xImlMY?|RCq zGs0-SX9fFE;U|=)BK^WY;<*Z~FR6t5`# zhX^)Qv#An>oFtQ{mtMp??rT{l(@DkCY0>E1pk=HDDvk4%2U&HWyg{}|UTsKbA0=j- zAS>Oi(k*^gV|$15@10iQ84;;JcvJgv&~vE9AB@p=WFH%XIZlZ{E*30%o%u6ScV54o zkzI{)eoL&`6zvfkiM~I2cDjSIKRRsy?>cvOkob&Y_|ep#edQIpv5g`IJlaD!fx8B> z@3}8vm+q z%$e2)vz>^1UJxq#b%!5*__Jz9$^Cp;d6MJ4hJG4-Qk}c9JR`19{0((OuT}d0Bcvb6 zL3S1QI_0Dx^;uUEwMvdTSZT@PkB95q2L#>O>>%RC3M%qh{po_c@4mZTo9C5BGbCRr zvnMDNM_0OWPAg-M>UK5#@l=_IEIK=KM3uQB^5&fd-O=wF}8)@el?p?JH(O?#VHUv}ALgSBm;;+)w~d57Gj_dip47R<{ykNfJ`oeX*~ zL3%Z=jn{tnn)QUq7v!KC;jT~I-Wx;(tIq6@a^9st0uOYnalNFAhk$2ix$XY^0-pXyV zV0%GV8uK_MZrBy_fuL+h z{nc>Q+19MIgxn?WpP0AbIwS4tWgU?I!Zf9MQYbI7+~^0iNBD(|d_YFjndW3gR+0CT z>x@&nY8vN|#d4Ni2;YY625(a?mn+Vr$tr)`(Jw#`B9Jf03_43zjJ`s}85zv+YTOUF z2AN$TEfw`@L-upkRabF7Z{hvH^XJcBkTEwz&!D5%j5bpo73+A&c50m8uhcqk7Ekkz zDu3$sx4!i)&UGrRql$bWLq;CYEKlpcR&|L+MSeeC=bB^+G_&77| zoUeV*K?g+_Uwm<-c+EXToXNvoGMx#}KKraW!$x|Dk@!|~1|(;I*PAZRgCK8$nHF%o z>#n=t{X??i>*U@M2ECn%_>MgC$Z~+ZpcCoSc>oB=YhPWj1Cbr(lE!YknbVeW8I=)cCV{qYQg+QfXoQsbS1tqw}w7p4*GhG3TV$ zUlLs#^6|$XH)oytd6#EbUa?MAh$lqPG(&#?ozg}a`27k!U352!=I+ma_OrV9e658Q zjiTH7qwiAw)eP~xpisKdAqm96T3I9J15f$5nS*MaDx|j~-LC$A_#$@B$X}oO{H%h~ z_{jZqHJ3kmgkD+}Ue_HxB8>x~b@#`Gr#ug6J*YeretYEDpq6y1{Z%qzP8sy%Bt@ch+`>UxSUpU%#< zi~r(2zD$y(zf#xzMm8O+8D%1OK1jEGvC3$^4d*=Bb6Sg`zEsGWbw^d9wy$}?FomzX zjJRW_nkm|!>by16N8fkfedc~??wHm-;ppxC6VI;cmEE@cDj2XTOKy zbMAn1<73}(EqwrEh8v!HO%^U)y0nNcNA8`{cx%@_?Ieu< z!aY8<-nVD*hMqbz)sG@&*ScsSnnSp86Ay{*dFENMHZs=V)E~VOz;meFikb?Z|7&0S zTC0W|7Qz7fq{jP=Toz7etD&%gQb-g#D{cninPu`+anp?5ufxYK}vdGgD*+gOHdEwR; zk@M2_#Urfs!uFJZTv+WL|82hN%;Yu7>*|wZ#fe;4Vf^x#E4PgWS>`x>NR^rPT2$P% z7OH>kxl_@Pv#0&1%fQc{(A|%rGSM9>@cpUsl>N(sEOW0ur2K2ITgAOgeq5U0&JZtM zu}0wIDr)a3|8yDn`G!t8d!hVt@a?S8_+e$gOAs=><>;TS$o)gP`g~gB=&!J;dea_z zPx>QoN?{zQ`WwrUr3dq?jg!;`-*c_qxa+Wlz+M${Bpt0enaJb z?mpW1T(VTTD*O=w-~2`nDSzxm^y`#wZ?CM+j}v=O`KQYvlt;KtpFX|fK1jcOI43U< z{sy`E=4Cm!<=>XVyNZRd|TW*;<_9K6A!!+`}r~Kb8iz4|dJ@DLf$>Ou?lQI@wWCQ2~?C!^*bM<@5=I* zZrJq9gvKAZ%O;Q>^a1|jxvxdZBnRJ$My>UGahvjJMEQdk{T}JUR3wG#fX+GRoQ9P> zadl<+tFCh=b=5tC%;!XBO0P@y2L!3LJC*B#iVX7{go?AL8k&DDzC8V3-3?zjZmpF@ z>?N{$L-yNmzewke6b|pwRqb7Oz<9ZowzgOQw_4nMQ<-pPbyXvsF#nw4=M*+28M^=vAAECQO)+NpgGj|BKM3GZu5@b@BbsuH1( zfjxpVg)gP^vEzhh#{q{oPO6||o*qghito>Iho*_g}d)+pq{lAiv zcX;{hK8aj?p!i-gmlov0DIHPKIyA2yac4$*%eP4QJf13#&hGHN=w7uV`BBXeWs;X( z&Ds5R9`pigE`ObC(Oiv|Mty^KfAYyE^ODtVzd!QGBMseSRxMxKQU2Ys|F>zS4qSTa zr4c;z`eHcq;p(fej@W-{)6vn-cJ%+-Te@h=X95Pp*dL8uU|jb#XGIs zZ9cVw|Ld0XKbtQ9Ntc9z4u1a!;a27@4Sff z>FBF`dOORG9&TPc$e90)cWLBo(L6kJ=FIWu5nYyUm-ct^dlC7MWP8)RJmQRp)Y(yz zWo0j##1*5X<-Z<{J$0*qti7Q8m-)V%pUtw@v;MQZBiDaC8eMvO-qYo0@`JKa)684{ zfzJ=E|J1ww%l^_XFAv=t8|fTzGf&h#fYGd3vkZ^Ox?iIK+{pPE`#FQ;fCCQb^7K;% z+;N#VW=m!pTK~O9;Y0c#BlGZ`eDcX%$^)RgQEkm7kN!q|*SdOyJh&^{LJ|FsKmPHL zA^nf@MfWj2?b83sl_hqh{+CaWZ`XO3xo5jHs(g#!;hakC#p$v-z`cWcbY|#(9i_aj z(Err=hPmb6k@}y0dAs)Gk3T*ysa^7&I&kQrhjvLFD5C$V`Du#JkMp#zp6Gusi|vN~ zuGar{X>s3KYn?o~(9xq^QU_QIbm{G^cjV-2#ChcHNn9F=9yvmFcYV zmo7}M%ujSO$4|+2;xeYJL*{-ty5%3~{KwqA#nR21-pKPGeHyI2JCwifUyazG1WoW6 zx{EW_b#zAgE3elm&tFSL9I$9#LP$^l9?_mDQ^4HmZxobg0Egij3Ka;}c&k6G`@GMxYXy1-2%=RePO(-?Y}yzrHd z)(Pki<^SS~FLD<~l0V29T+`9zPaZ3;bNA@!Y(UoM{d3Mo6gWXeSmZzxp%PLWgWuNUCKX{cI(!WdyR|ax%Jag<*&V4obi>L z|J?tivU($s{x8a{s9{~$UoVbyze}!O2>GD=^!J(7R33^u=)Xw$6F=)jSvY+6GtWGe zAPqAeRsKcJdL|L#OUiy4W#=AGyVkGQLgpm-O68-@8JR12^3o!iC4HlY*MXwt&l-U4 zpUk~;@$9qDj&!G8k>nKi(-Gxg^v)l6G_`$r{8YKgete-4PkW-iP;XMW4m<3yT)7jO z#ks_~gQ=lsL>4W7TUfJa&t^`NqM!6=e2jFTqV?9$XQRts^4sak%Us@@L>zqZ!DYX^ zWJd;2Yui^4V=C4Ja=x{K-4@PZNs} zsxxsozu#ZyqwXJJO0xdHXB0HmhIB^EXw}JeMd*^8yuTm5Uc36iB2lLNbaweOrqr80 zKb+1tDcaYrLtn!WFZ;8C_L}{Kz?UPj=c14dQiZWD;~t`#^NBN8YBil*{yJ;D=5#54 zE5a1f>#})~k-zi>`?R<4*rHf?qvn1+HzSeeQELodwca<*y_5BlOeBlX~I60}q^}Jj%V##pbi>N;wc0 zWptRJBTR*km?BxLGZ^v@L5qo|4z#x)IN^j7BJ#V4>5TH1Oe8wuh$HGQcjY1B$JJ8y z+RrzFyeF&&H_F~oW-}q??x<9p;sxf{zza}pE6zRl+`&GcTI`&$^5BCH=Jo|0S^mhG z&^5ODAhpo%`c+;q-skSOvGtuXAO6e55x*m|&C>1Br-qn)g@yejsXCxDTVH0~$q z9TCS>S6vmIc;bnX_@4^geq4EW?V&+`zYwoSp6X2Vg*u~UN&qjqUX9}Sg{rDKRbMO8 zj-EN|4+Y9T@gjZA0gaRqh3M*zZloF6h%%y(9EA+iKCTrR{2pcTbwOtu_77Fm0nQJt zVNPJ`0WvQ3v4!w$h;H1SAX)ubllX#v%F{K<+vhX#<660Qw%JG#J|?KB1KMjmP`pgx zdQBF{`%OH&lpe~WD-3hYk%EdkAbR_&&gR}v z?B|2lWkz)5-6A1cJHt(FcTSNr`uzN$-Dlk0M4r7^lMRi3mSbIdX9*Q!`!iPHzKx1C^pFz}>*69mgea*HB%Dp)^b`qomPzyU6Bf;%t%TE3HZbT=~A?=5Y}cDibQ zuc+H?kQFZz*z}~H)O+a@zFbSb)!}!A#L|Fo%0w=%37 zpi^3*S1h+APsA53X79Q9K1$3p5{l?6J*C!<%lJ0`H6i{RHS(zSGP{mEb1? zNttK7uN9v-M*BYo6y1N;74?C&4xP(0B)(^{+W2nMi+(=5(L3E7tqch5U$FV)K9_MW z*`0UZIikqfR2^Lppy7@??iiu-M3LQO&U5t5O#^z+?6K}KZ|4B#ke?)g_jU8C+Iy>X zjz&vv_RohNdT69%?j1U3qb{k5w?6vlqmxfM>7*f&V?k??c5c%^9X~9$Fcm(6GtK(+=`&37 zy&(YaxbY1?F|S^0-ScUhCz_Gn!Q=Fp_T>QQl6^(+C&3bdpV!^R4zGW&;5Y#^_n5}# z0Q&9li#H3V2)erL(Zl(T;3z>y>)tDh9^>UeAK6)BVBZVp&n**lRGmP_o;Zl>6u~Zn z9@D*YfO*930{RHk03;@eM!tB@AIN6o6|t!3M{_weiJ^ zOQkJc4p}KJId*+cd1%7kEAarMBy)vzFy2e0KGt3~pGzBAdsCa;B8Y=02;OS@oFItN zB@~qH_ZVT5wZ{mpHBJH|#@HML1qu2%f&_gWL5uZWD)q*H`E9$2u<32PiSTW!i7-hG z?pJ7MkNf?gO1ndjA;=-e5Y*y^7eT(g?0y%4O|D%8`gZp-1bg-r`AR^F{8H&4-<~30 z3COdjlBWdv_Lej~z4PqlwEvB2wKt{1_o~&N4&Gzy>>Q}IynO%VG{H63pO$p^-g$Pv zzWesP_Tzu|+oNyy+q2)^E9^~ff&%?V+5N8mrp2`f`lnO^HOQnA(5JFLOeH}5Whw#c zPg4ZT>UMCZKXwQ-{k21&>CYX4%$Vm8)CYVH0S94sA~e>wBQ()D1B8h#ijoN8AvKAh vPh0pTMOU=hEy5UGf-pvxAWTN+7=aBQXF(D?4v=_PER<0knR$rB`1Ah*h8}%p literal 0 HcmV?d00001 diff --git a/utils/Info.plist b/utils/Info.plist new file mode 100644 index 0000000..1f09cbb --- /dev/null +++ b/utils/Info.plist @@ -0,0 +1,29 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + mod-app + CFBundleIconFile + mod-logo.icns + CFBundleIdentifier + audio.mod.app + NSHighResolutionCapable + + NSRequiresAquaSystemAppearance + + NSMicrophoneUsageDescription + MOD App requires microphone permissions for audio input. + CFBundleSupportedPlatforms + + MacOSX + + LSMinimumSystemVersion + 10.15 + NSHumanReadableCopyright + (C) 2023 MOD Audio UG. +This program is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. + + diff --git a/utils/macos-dmg.sh b/utils/macos-dmg.sh new file mode 100755 index 0000000..f2446f5 --- /dev/null +++ b/utils/macos-dmg.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +set -e + +if [ ! -d build ]; then + echo "Please run this script from the root folder" + exit +fi + +QTLIBS=("Core" "Gui" "OpenGL" "PrintSupport" "Svg" "Widgets") + +rm -rf mod-ui/mod/__pycache__ +rm -rf mod-ui/mod/communication/__pycache__ +rm -rf mod-ui/modtools/__pycache__ + +rm -rf build/dmg +mkdir build/dmg + +cp -rL build/mod-app.app build/dmg/ +cp utils/macos-readme.txt build/dmg/README.txt + +pushd build/dmg/mod-app.app/Contents + +rm -rf Frameworks/*/*.prl +rm -rf Frameworks/*/Headers +rm -rf Frameworks/*/Versions +rm -rf MacOS/data + +for f in $(ls Frameworks/*/Qt* PlugIns/*/libq*.dylib); do + for q in "${QTLIBS[@]}"; do + install_name_tool -change "@rpath/Qt${q}.framework/Versions/5/Qt${q}" "@executable_path/../Frameworks/Qt${q}.framework/Qt${q}" "${f}" + done +done + +for f in $(ls MacOS/jackd MacOS/lib/libmod_utils.so MacOS/libjack*.dylib MacOS/jack/*.so); do + install_name_tool -change "${HOME}/PawPawBuilds/targets/macos-universal-10.15/lib/libjack.0.1.0.dylib" "@executable_path/libjack.0.dylib" "${f}" + install_name_tool -change "${HOME}/PawPawBuilds/targets/macos-universal-10.15/lib/libjackserver.0.1.0.dylib" "@executable_path/libjackserver.0.dylib" "${f}" +done + +popd + +hdiutil create "mod-app-$(make version)-macOS.dmg" -srcfolder build/dmg -volname "MOD App" -fs HFS+ -ov +rm -rf build/dmg diff --git a/utils/macos-readme.txt b/utils/macos-readme.txt new file mode 100644 index 0000000..639e658 --- /dev/null +++ b/utils/macos-readme.txt @@ -0,0 +1,9 @@ +README for MOD Audio for macOS + +For the moment the application bundle is not signed, and as such it will refuse to run by default. + +To allow the application to run, please right-click on it and select open. +A warning will appear saying macOS cannot verify the application, that is expected. +Right-click and select to open it a 2nd time, and this time pick the new "Open" option to allow it to run. + +Also, MOD App requires macOS 10.15 or later, it will not run on older versions. diff --git a/utils/plugin-builder.mk b/utils/plugin-builder.mk index 98f7ef7..05d055f 100644 --- a/utils/plugin-builder.mk +++ b/utils/plugin-builder.mk @@ -49,6 +49,8 @@ github = https://github.com/$(1)/$(2)/archive/$(3) PKG = $(call UPPERCASE,$(call sanitize,$(pkgname))) $(PKG)_PKGDIR = $(CURDIR)/mod-plugin-builder/plugins/package/$(pkgname) +RENAME_EXTENSION = $(foreach f,$(2)$(3)$(4)$(5)$(6)$(7)$(8)$(9)$(10)$(11)$(12)$(13)$(14)$(15)$(16)$(17)$(18)$(19),mv $(f) $(subst .so,.$(1),$(f));) echo + BR2_TARGET_OPTIMIZATION = MAKE1 = make -j1 @@ -71,12 +73,6 @@ TARGET_LDFLAGS = $(LDFLAGS) TARGET_DIR = $(PAWPAW_PREFIX) -ifeq ($(MACOS),true) -libtoolize = glibtoolize -else -libtoolize = libtoolize -endif - ifeq ($(MACOS),true) STRIP = true else ifeq ($(WINDOWS),true) @@ -84,7 +80,9 @@ BR2_SKIP_LTO = y endif ifneq ($(TOOLCHAIN_PREFIX),) -BR2_EXTRA_CONFIGURE_OPTS = --host=$(TOOLCHAIN_PREFIX) ac_cv_build=$(shell uname -m)-linux-gnu ac_cv_host=$(TOOLCHAIN_PREFIX) +BR2_EXTRA_CONFIGURE_OPTS = --host=$(TOOLCHAIN_PREFIX) +BR2_EXTRA_CONFIGURE_OPTS += ac_cv_host=$(TOOLCHAIN_PREFIX) +BR2_EXTRA_CONFIGURE_OPTS += ac_cv_build=$(shell uname -m)-linux-gnu endif define generic-package @@ -172,10 +170,12 @@ all: $(STAMP_PINSTALLED) $(STAMP_PINSTALLED): $(STAMP_INSTALLED) $(call $($(PKG)_POST_INSTALL_TARGET_HOOKS)) ifeq ($(MACOS),true) - $(foreach b,$($(PKG)_BUNDLES),sed -i -e 's|lv2:binary <\([_a-zA-Z0-9-]*\)\.so>|lv2:binary <\1\.dylib>|g' $(PAWPAW_PREFIX)/usr/lib/lv2/$(b)/manifest.ttl;) + $(foreach b,$($(PKG)_BUNDLES),sed -i 's|lv2:binary <\([_a-zA-Z0-9-]*\)\.so>|lv2:binary <\1\.dylib>|g' $(PAWPAW_PREFIX)/usr/lib/lv2/$(b)/manifest.ttl;) + $(foreach b,$($(PKG)_BUNDLES),$(call RENAME_EXTENSION,dylib,$(wildcard $(PAWPAW_PREFIX)/usr/lib/lv2/$(b)/*.so));) else ifeq ($(WINDOWS),true) - $(foreach b,$($(PKG)_BUNDLES),sed -i -e 's|lv2:binary <\([_a-zA-Z0-9-]*\)\.so>|lv2:binary <\1\.dll>|g' $(PAWPAW_PREFIX)/usr/lib/lv2/$(b)/manifest.ttl;) + $(foreach b,$($(PKG)_BUNDLES),sed -i 's|lv2:binary <\([_a-zA-Z0-9-]*\)\.so>|lv2:binary <\1\.dll>|g' $(PAWPAW_PREFIX)/usr/lib/lv2/$(b)/manifest.ttl;) $(foreach b,$($(PKG)_BUNDLES),rm -f $(PAWPAW_PREFIX)/usr/lib/lv2/$(b)/*.dll.a;) + $(foreach b,$($(PKG)_BUNDLES),$(call RENAME_EXTENSION,dll,$(wildcard $(PAWPAW_PREFIX)/usr/lib/lv2/$(b)/*.so));) endif touch $@ @@ -186,17 +186,17 @@ $(STAMP_INSTALLED): $(STAMP_BUILT) $(STAMP_BUILT): $(STAMP_CONFIGURED) ifeq ($(MACOS),true) $(foreach p,$(wildcard $($(PKG)_BUILDDIR)/Makefile $($(PKG)_BUILDDIR)/*/makefile),\ - sed -i -e 's/-Wl,--gc-sections//g' $(p);) + sed -i 's/-Wl,--gc-sections//g' $(p);) $(foreach p,$(wildcard $($(PKG)_BUILDDIR)/Makefile),\ - sed -i -e 's/-Wl,--as-needed//g' $(p);) + sed -i 's/-Wl,--as-needed//g' $(p);) $(foreach p,$(wildcard $($(PKG)_BUILDDIR)/*/makefile),\ - sed -i -e 's/-Wl,--no-undefined//g' $(p);) + sed -i 's/-Wl,--no-undefined//g' $(p);) $(foreach p,$(wildcard $($(PKG)_BUILDDIR)/*/makefile),\ - sed -i -e 's/-Wl,--exclude-libs,ALL//g' $(p);) + sed -i 's/-Wl,--exclude-libs,ALL//g' $(p);) $(foreach p,$(wildcard $($(PKG)_BUILDDIR)/*/makefile),\ - sed -i -e 's/-Wl,-z,relro,-z,now//g' $(p);) + sed -i 's/-Wl,-z,relro,-z,now//g' $(p);) $(foreach p,$(wildcard $($(PKG)_BUILDDIR)/*/makefile),\ - sed -i -e 's/-Wl,-z,noexecstack//g' $(p);) + sed -i 's/-Wl,-z,noexecstack//g' $(p);) endif $($(PKG)_BUILD_CMDS) touch $@ @@ -205,7 +205,7 @@ $(STAMP_CONFIGURED): $(STAMP_PATCHED) ifeq ($($(PKG)_AUTORECONF),YES) (cd $($(PKG)_BUILDDIR) && \ aclocal --force && \ - $(libtoolize) --force --automake --copy && \ + libtoolize --force --automake --copy && \ autoheader --force && \ autoconf --force && \ automake -a --copy \ @@ -229,7 +229,7 @@ ifeq ($($(PKG)_SITE_METHOD),git) git clone '$($(PKG)_SITE)' '$(PAWPAW_TMPDIR)/$(PAWPAW_TMPNAME)' && \ git -C '$(PAWPAW_TMPDIR)/$(PAWPAW_TMPNAME)' checkout '$($(PKG)_VERSION)' && \ touch '$(PAWPAW_TMPDIR)/$(PAWPAW_TMPNAME)/.gitmodules' && \ - sed -i -e 's|git://github.com/|https://github.com/|g' '$(PAWPAW_TMPDIR)/$(PAWPAW_TMPNAME)/.gitmodules' && \ + sed -i 's|git://github.com/|https://github.com/|g' '$(PAWPAW_TMPDIR)/$(PAWPAW_TMPNAME)/.gitmodules' && \ git -C '$(PAWPAW_TMPDIR)/$(PAWPAW_TMPNAME)' submodule update --recursive --init && \ tar --exclude='.git' -czf '$($(PKG)_DLFILE)' -C '$(PAWPAW_TMPDIR)' '$(PAWPAW_TMPNAME)' rm -rf '$(PAWPAW_TMPDIR)' diff --git a/utils/plugin-builder.sh b/utils/plugin-builder.sh index 34b4c7c..8de5495 100755 --- a/utils/plugin-builder.sh +++ b/utils/plugin-builder.sh @@ -15,6 +15,11 @@ if [ -z "${target}" ] || [ -z "${plugin}" ]; then exit 1 fi +if [ ! -e mod-plugin-builder ]; then + echo "missing mod-plugin-builder" + exit 1 +fi + # --------------------------------------------------------------------------------------------------------------------- # import env @@ -30,9 +35,8 @@ export PAWPAW_DOWNLOADDIR export PAWPAW_PREFIX export TOOLCHAIN_PREFIX -if [ ! -e mod-plugin-builder ]; then - echo "missing mod-plugin-builder" - exit 1 +if [ "${MACOS}" -eq 1 ]; then + export PATH="${PAWPAW_PREFIX}-host/bin:${PATH}" fi make -f utils/plugin-builder.mk pkgname="${plugin}" ${MAKE_ARGS} PREFIX=/usr WITH_LTO=false VERBOSE=1 diff --git a/utils/test.sh b/utils/test.sh index 28c3cf2..e7d13f1 100755 --- a/utils/test.sh +++ b/utils/test.sh @@ -17,7 +17,6 @@ fi # --------------------------------------------------------------------------------------------------------------------- # set up env -export JACK_DRIVER_DIR=$(pwd)/build/jack export LV2_PATH=$(pwd)/build/plugins # export MOD_LOG=1 @@ -27,27 +26,39 @@ export JACK_NO_START_SERVER=1 # --------------------------------------------------------------------------------------------------------------------- # run command -JACKD="./build/jackd" +if [ "${target}" = "macos-universal-10.15" ]; then + export JACK_DRIVER_DIR="$(pwd)/build/mod-app.app/Contents/MacOS/jack" + JACKD="./build/mod-app.app/Contents/MacOS/jackd" +else + export JACK_DRIVER_DIR="$(pwd)/build/jack" + JACKD="./build/jackd" +fi if [ "${target}" = "win64" ]; then -JACKD+=".exe" -EXE_WRAPPER="wine" + JACKD+=".exe" + EXE_WRAPPER="wine" fi +# EXE_WRAPPER="lldb -- " -JACKD+=" -C utils/jack-session.conf -R -S" +JACKD+=" -R -S -C utils/jack-session.conf" if [ "${target}" = "macos-universal-10.15" ]; then -# JACKD+=" -X coremidi" -JACKD+=" -d coreaudio" -JACKD+=" -P 'Built-in'" + # JACKD+=" -X coremidi" + JACKD+=" -d coreaudio" + JACKD+=" -P 'Built-in'" elif [ "${target}" = "win64" ]; then -JACKD+=" -X winmme -d portaudio -d 'ASIO::WineASIO Driver'" + JACKD+=" -X winmme" + JACKD+=" -d portaudio" + JACKD+=" -d 'ASIO::WineASIO Driver'" else -# -X alsarawmidi -JACKD+=" -d portaudio -d 'ALSA::pulse'" + # -X alsarawmidi + JACKD+=" -d portaudio" + JACKD+=" -d 'ALSA::pulse'" fi -JACKD+=" -r 48000 -p 128" +JACKD+=" -r 48000" +JACKD+=" -p 256" +# JACKD+=" -p 8192" exec ${EXE_WRAPPER} ${JACKD} diff --git a/utils/win64-installer.iss b/utils/win64-installer.iss index cd229d5..0bcc62a 100644 --- a/utils/win64-installer.iss +++ b/utils/win64-installer.iss @@ -12,7 +12,7 @@ DefaultDirName={commonpf64}\MOD App DisableDirPage=yes DisableWelcomePage=no LicenseFile=..\LICENSE -OutputBaseFilename=mod-app-win64-{#VERSION}-installer +OutputBaseFilename=mod-app-{#VERSION}-win64-installer OutputDir=.. UsePreviousAppDir=no