From 9e245d13e888d04b7cc4c39247cd0d3ec3a980ff Mon Sep 17 00:00:00 2001 From: Gerasim Troeglazov <3dEyes@gmail.com> Date: Wed, 17 Feb 2021 21:57:31 +1000 Subject: [PATCH] Aquaria: add recipe --- .../aquaria/additional-files/aquaria.rdef.in | 86 ++++++++++ .../aquaria/additional-files/aquaria.sh | 16 ++ .../additional-files/default_usersettings.xml | 77 +++++++++ .../aquaria/aquaria-1.1.3~git06072020.recipe | 129 +++++++++++++++ .../aquaria-1.1.3~git06072020.patchset | 151 ++++++++++++++++++ 5 files changed, 459 insertions(+) create mode 100644 games-arcade/aquaria/additional-files/aquaria.rdef.in create mode 100755 games-arcade/aquaria/additional-files/aquaria.sh create mode 100644 games-arcade/aquaria/additional-files/default_usersettings.xml create mode 100644 games-arcade/aquaria/aquaria-1.1.3~git06072020.recipe create mode 100644 games-arcade/aquaria/patches/aquaria-1.1.3~git06072020.patchset diff --git a/games-arcade/aquaria/additional-files/aquaria.rdef.in b/games-arcade/aquaria/additional-files/aquaria.rdef.in new file mode 100644 index 000000000..38882f8f4 --- /dev/null +++ b/games-arcade/aquaria/additional-files/aquaria.rdef.in @@ -0,0 +1,86 @@ +resource app_flags B_SINGLE_LAUNCH; + +resource app_version { + major = @MAJOR@, + middle = @MIDDLE@, + minor = @MINOR@, + + variety = B_APPV_FINAL, + internal = 0, + + short_info = "Aquaria", + long_info = "@LONG_INFO@" +}; + +resource app_signature "@APP_SIGNATURE@"; + +resource vector_icon array { + $"6E636966100303518C02000602B2AA48BC7FA53D5F85B399154ADD7346BC6D00" + $"DF307AFFFFFFFF03FFDCEB020016023B28293B34F5BAD9BD3ACE5E4A6632481F" + $"2B00FFFF9A0352ABB3020006023C3557BAD6903B1BC33C6B2E482E634AA80600" + $"FFFFFFFF219B8B037703680321467C032EA1AB020006023A4BC63AB452BAAB09" + $"3A43E44ABA5B48C32600FFFFFFFF229E88030D3E6D03C8619D030C302E031B72" + $"76030830380400710E020FBE70B420BE70B420BEBEB49BBF90B560BF21B504C0" + $"0BB638C26EB571C1A8B5DAC4B3B4EEC914B6A2C70EB591CA14B6EBC8C0B54BC8" + $"F5B5B3C984B5D3CA35B78DC9D9B6BBCA97B9DDC87DBE0BC9E1BC33C6F7C06CC3" + $"72C4D7C551C2B9C2F1C2FBC550C0134DC1C3C5ABBF65C659BE01C60FBEB8C726" + $"BC02C73CB79455B9AFC68BB5DFC2E0B6A2C44AB5FAC2AAB6AFC23EB6C8C274B6" + $"BCC107B708BEF8B5ACBFC5B69BBED3B524BE70B420BE81B4AEBE70B4200206C3" + $"6DB4CAC36DB4CAC518B3D5C8C0B54BC74FB403C8F5B5B3C914B6A2CA14B6EBC7" + $"0EB591C26EB571C4B3B4EEC1A8B5DABF90B560C00BB638C0DAB605C36DB4CAC2" + $"46B573C36DB4CA021BB517BC3BB517BC3BB56DB788BEF8B5ACBABAB50ABFC5B6" + $"9BC23EB6C8C107B708C39EB728C17DB79BC084B6F9C2B3B880C146BB08C24DBA" + $"2AC0DDBB7CBFD3BC83BFCBBE35BFB7BC53BFC7BB92C03BBB5FBF80BCB4BEBDBE" + $"E7BF37BDD7BDCBBDE9BF88BA90BF68BBF4BFC1B93EBEB3BBA3BECCBB22BE41BC" + $"92BD51BE81BE16BDC9BD5ABCF9BE17B9E0BE44BB27BD0EBB72BCCFBF87BD59BD" + $"B5BCA9BFD4BC6EC07DBCEDC096BC4ABF8CBC39BDA1BC61BE92BC2DBE43BC01BF" + $"87BC21BEE7BB63BE29BB11BB37BB77BCA1BB18BC4DBB6DBE6FBB0DBD68BA7CBD" + $"F0BBADBF58BBA8BEE5B9DABF2FB7B3BC43B8B3BD9DB818BD97B9D3BFCFB939BE" + $"C5B89ABF7CB6AEBD6AB78EBE5FB714BE68B7CEC06BB766BF6EB6BCBFC5B5AFBD" + $"8928BE9FB5AFBDFFB5D6BEE8B5C3BE74B5D0BF59B5B6C03BB5D9BFCEB534BEF8" + $"B517BC3BB4E5BD98B517BC3B0208C23EB6C8C23EB6C8C274B6BCC2E0B6A2C2AA" + $"B6AFC389B6FDC47DB823C40DB789C305BA41BF7DBDF9C10ABBEEBF97BD7DBFD3" + $"BC83BFB7BD01BFCBBE35C146BB08C0DDBB7CC24DBA2AC17DB79BC2B3B880C084" + $"B6F9C23EB6C8C39EB728C23EB6C80205B8BCC16FB8BCC16FB87FC1FCB97DC2CC" + $"B905C2A0B998C26EB91CC1EBB953C22BB9ECC19FBA61C2D0BAE5C1C4BB91C1C1" + $"B8BCC16FB9E2C126B8BCC16F0025C47DB823C47DB823C4F8B832C594B775C523" + $"B770C59BB7DDC580B8ADC589B846C537B92DC498BA22C4EAB9AAC2C8BB8EC0C4" + $"BFBEC130BD6DC0CFC0F8C055C39BC183C2D7C04BC396C03BC38AC042C38FBFF2" + $"C32CBF39C286BFB5C29CBFFCC46CBE0DC81FBF4EC698BDA8C872BCDDC916BD42" + $"C8C2BBD8C945BAADC7D7BB90C812B9CAC756BBAFC6A135C6E7BAE5C6CFB99AC5" + $"FAB955C788B93DC5C4B7FBC58AB854C624B7E9C46CB7F2C22BB806C34BB715C1" + $"2DB5D6BEE8B610C03DB5C3BE74B5AFBD89B5AFBDFF28BE9FB7CEC06BB6BCBFC5" + $"B766BF6EB6AEBD6AB714BE68B78EBE5FB9D3BFCFB89ABF7CB939BEC5B7B3BC43" + $"B818BD97B8B3BD9DBBADBF58B9DABF2FBBA8BEE5BB6DBE6FBA7CBDF0BB0DBD68" + $"BB11BB37BB18BC4DBB77BCA1BC01BF87BB63BE29BC21BEE7BC39BDA1BC2DBE43" + $"BC61BE92BC6EC07DBC4ABF8CBCEDC096BCCFBF87BCA9BFD4BD1ABF77BD2ABFF9" + $"BDA4BF1EBCCB43BDCEC298BDA8C1AEBE5BC1A1BED6BF50BEAEC06EBE9A40BE34" + $"C0A7BE71C039BE32C008BEBDBEE7BE89BF7BBF37BDD7BFC7BB92BF80BCB4C03B" + $"BB5FBFD3BC83BFB7BC53BFB7BD01BF7DBDF9BF97BD7DC10ABBEEC47DB823C305" + $"BA41C47DB8230206CA35B78DCA35B78DCB01B9E4C8A2BE4BC9F0BC5BC6BDC0FD" + $"C282C619C4DDC3CCC2CCC5A8C372C4D7C318C53AC551C2B9C87DBE0BC6F7C06C" + $"C9E1BC33CA35B78DCA97B9DDCA35B78D0209C498BA22C498BA22C4EAB9AAC580" + $"B8ADC537B92DC5B3BA73C659BE01C653BC57C60FBEB8C550C013C5ABBF65C3E8" + $"C251C10BC6C3C28CC497C01DC5E9C0FCC3F8C184C4A6C2EFC3EAC40BC01AC424" + $"C1E7C3CDBF1BC4C1BDA0C562BE9EC459BC80C498BA22C46DBB4DC498BA22020B" + $"BCCFBF87BCCFBF87BD59BDB5BE17B9E0BD0EBB72BE44BB27BD51BE81BD5ABCF9" + $"BE16BDC9BEB3BBA3BE41BC92BECCBB22BF88BA90BFC1B93EBF68BBF4BEBDBEE7" + $"BDCBBDE9BE89BF7BBE34C0A7BE32C008BE71C039BED6BF50BE9A40BEAEC06EBD" + $"CEC298BE5BC1A1BDA8C1AEBD2ABFF9BCCB43BDA4BF1EBCCFBF87BD1ABF77BCCF" + $"BF870207C0C4BFBEC0C4BFBEC130BD6DC498BA22C2C8BB8EC46DBB4DC4C1BDA0" + $"C459BC80C562BE9EC40BC01AC3CDBF1BC424C1E7C0FCC3F8C2EFC3EAC0C2C3DC" + $"C055C39BC08AC3BDC183C2D7C0C4BFBEC0CFC0F8C0C4BFBE0207C10BC6C3C10B" + $"C6C3C28CC497C550C013C3E8C2514DC1C3C372C4D7C2F1C2FBC318C53AC282C6" + $"19C2CCC5A8C11FC7B6BEB4CB36BFE9C977BED9CA84BF8BC94BBF39C9E9C006C8" + $"6FC10BC6C3C08EC79EC10BC6C30205B8BCC16FB8BCC16FB9E2C126BA61C2D0BB" + $"91C1C1BAE5C1C4B91CC1EBB9ECC19FB953C22BB97DC2CCB998C26EB905C2A0B8" + $"BCC16FB87FC1FCB8BCC16F0204BF39C286BF39C286BFB5C29CC03BC38ABFF2C3" + $"2CC093C564BE0DC81FBF99C724BF4EC698BF39C286BFFCC46CBF39C2860209C0" + $"3BC38AC03BC38AC042C38FC055C39BC04BC396C08AC3BDC0FCC3F8C0C2C3DCC1" + $"84C4A6C10BC6C3C01DC5E9C08EC79EBF8BC94BC006C86FBF50C8E0BE99C83FBE" + $"F8C887BDFEC87BBCDDC916BD90C941BD42C8C2BE0DC81FBDA8C872BF99C724C0" + $"3BC38AC093C564C03BC38A0F0A0F070001020305070A30222201178422040A00" + $"070001020305070A1001178422040A010100000A020101000A030102000A0401" + $"03000A05020405000A060106000A070107000A080108000A090109000A0B010A" + $"000A0C010B000A0D010C000A0E010D00" +}; diff --git a/games-arcade/aquaria/additional-files/aquaria.sh b/games-arcade/aquaria/additional-files/aquaria.sh new file mode 100755 index 000000000..c02eb2eac --- /dev/null +++ b/games-arcade/aquaria/additional-files/aquaria.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +gamedir=$(dirname $(realpath $0)) +if [ -z "$AQUARIA_DATA_PATH" ]; then + exec $gamedir/AquariaLauncher + exit +fi + +settingsDir="`finddir B_USER_SETTINGS_DIRECTORY`" + +mkdir -p $settingsDir/Aquaria/preferences +cp -n $gamedir/default_usersettings.xml $settingsDir/Aquaria/preferences/usersettings.xml +cp -rf $gamedir/files/* $AQUARIA_DATA_PATH + +cd $gamedir +exec ./Aquaria diff --git a/games-arcade/aquaria/additional-files/default_usersettings.xml b/games-arcade/aquaria/additional-files/default_usersettings.xml new file mode 100644 index 000000000..369ada97f --- /dev/null +++ b/games-arcade/aquaria/additional-files/default_usersettings.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/games-arcade/aquaria/aquaria-1.1.3~git06072020.recipe b/games-arcade/aquaria/aquaria-1.1.3~git06072020.recipe new file mode 100644 index 000000000..f8f3d4e1a --- /dev/null +++ b/games-arcade/aquaria/aquaria-1.1.3~git06072020.recipe @@ -0,0 +1,129 @@ +SUMMARY="A 2D fantasy underwater action-adventure game" +DESCRIPTION="Aquaria is an award-winning action-adventure game set in a \ +massive underwater world teeming with life and filled with ancient secrets. \ +Join Naija, a lone underwater adventurer, as she travels from hidden caves \ +shrouded in darkness, to beautiful, sunlit oases in search of her past. \ +She'll uncover hidden treasures, explore uncharted waters, and do battle \ +with massive underwater beasts to learn the truth about her family \ +and reveal the secret of Aquaria. + +* Massive, beautiful world to explore +* Compelling story woven through beautiful visuals, music and voice-overs +* Innovative mouse-based control scheme and magic-based combat +* 175 unique creatures to discover, interact and do battle with +* Dozens of treasures to attain +* Cooking system for creation of powerful items +* Unlock all the Steam Achievements" +HOMEPAGE="https://github.com/AquariaOSE/Aquaria/" +COPYRIGHT="Bit Blot, LLC" +LICENSE="GNU GPL v2" +REVISION="1" +srcGitRev="c37f6ea6d81a85005ef718e2958872bda3ee0c30" +SOURCE_URI="https://github.com/AquariaOSE/Aquaria/archive/$srcGitRev.tar.gz" +CHECKSUM_SHA256="65b0c3ca8beb1a780f0a54fc0b3731efd6552a34e56013a27a53f0f78ad81768" +SOURCE_DIR="Aquaria-$srcGitRev" +srcGitRev2="9a77c718e1a61d378aadcc60efe8f5e78d14c685" +SOURCE_URI_2="https://github.com/EXL/BeGameLauncher/archive/$srcGitRev2.tar.gz" +CHECKSUM_SHA256_2="f4884f28d7e87f94f1f64b5eec2d5f7e5cc3503c85d950c4b78eb7736a314144" +SOURCE_DIR_2="BeGameLauncher-$srcGitRev2" +PATCHES="aquaria-$portVersion.patchset" +ADDITIONAL_FILES=" + aquaria.rdef.in + aquaria.sh + default_usersettings.xml + " + +ARCHITECTURES="!x86_gcc2 x86_64 ?x86" +SECONDARY_ARCHITECTURES="x86" + +PROVIDES=" + aquaria$secondaryArchSuffix = $portVersion + app:Aquaria + " +REQUIRES=" + haiku$secondaryArchSuffix + lib:libfreetype$secondaryArchSuffix + lib:libGL$secondaryArchSuffix + lib:libglu$secondaryArchSuffix + lib:libSDL2_2.0$secondaryArchSuffix + lib:libogg$secondaryArchSuffix + lib:libopenal$secondaryArchSuffix + lib:libpng16$secondaryArchSuffix + lib:libvorbis$secondaryArchSuffix + lib:libz$secondaryArchSuffix + " + +BUILD_REQUIRES=" + haiku${secondaryArchSuffix}_devel + devel:libfreetype$secondaryArchSuffix + devel:libGL$secondaryArchSuffix + devel:libglu$secondaryArchSuffix + devel:libSDL2_2.0$secondaryArchSuffix + devel:libogg$secondaryArchSuffix + devel:libopenal$secondaryArchSuffix + devel:libpng16$secondaryArchSuffix + devel:libvorbis$secondaryArchSuffix + devel:libz$secondaryArchSuffix + " +BUILD_PREREQUIRES=" + cmd:cmake + cmd:gcc$secondaryArchSuffix + cmd:ld$secondaryArchSuffix + cmd:make + cmd:pkg_config$secondaryArchSuffix + " + +BUILD() +{ + mkdir -p build + cd build + cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DAQUARIA_INTERNAL_ZLIB=OFF \ + -DAQUARIA_INTERNAL_PNG=OFF \ + -DAQUARIA_INTERNAL_FREETYPE=OFF \ + -DAQUARIA_INTERNAL_OGGVORBIS=OFF \ + -DAQUARIA_INTERNAL_SDL=OFF \ + -DAQUARIA_INTERNAL_OPENAL=OFF \ + -DAQUARIA_USE_SDL2=ON \ + -DFREETYPE_INCLUDE_DIRS=/system/$relativeIncludeDir/freetype2 \ + -DOGGVORBIS_INCLUDE_DIRS=/system/$relativeIncludeDir/vorbis \ + -DSDL2_INCLUDE_DIR=/system/$relativeIncludeDir/SDL2 + + make $jobArgs + + cd $sourceDir2 + mkdir -p build + cd build + cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DLAUNCHER=aquaria + make $jobArgs +} + +INSTALL() +{ + mkdir -p $appsDir/Aquaria + + cp -R files $appsDir/Aquaria + cp build/aquaria $appsDir/Aquaria/Aquaria + cp $sourceDir2/build/AquariaLauncher $appsDir/Aquaria/AquariaLauncher + cp $portDir/additional-files/aquaria.sh $appsDir/Aquaria + cp $portDir/additional-files/default_usersettings.xml $appsDir/Aquaria + + local APP_SIGNATURE="application/x-vnd.aquaria" + local MAJOR="`echo "$portVersion" | cut -d. -f1`" + local MIDDLE="`echo "$portVersion" | cut -d. -f2`" + local MINOR="`echo "$portVersion" | cut -d. -f3 | cut -d~ -f1`" + local LONG_INFO="$SUMMARY" + sed \ + -e "s|@APP_SIGNATURE@|$APP_SIGNATURE|" \ + -e "s|@MAJOR@|$MAJOR|" \ + -e "s|@MIDDLE@|$MIDDLE|" \ + -e "s|@MINOR@|$MINOR|" \ + -e "s|@LONG_INFO@|$LONG_INFO|" \ + $portDir/additional-files/aquaria.rdef.in > $sourceDir/aquaria.rdef + + addResourcesToBinaries $sourceDir/aquaria.rdef $appsDir/Aquaria/Aquaria + addAppDeskbarSymlink $appsDir/Aquaria/AquariaLauncher Aquaria +} diff --git a/games-arcade/aquaria/patches/aquaria-1.1.3~git06072020.patchset b/games-arcade/aquaria/patches/aquaria-1.1.3~git06072020.patchset new file mode 100644 index 000000000..ca0ceb4e6 --- /dev/null +++ b/games-arcade/aquaria/patches/aquaria-1.1.3~git06072020.patchset @@ -0,0 +1,151 @@ +From 05c14612165d1df231c71e470422b32766111458 Mon Sep 17 00:00:00 2001 +From: Gerasim Troeglazov <3dEyes@gmail.com> +Date: Wed, 17 Feb 2021 19:01:47 +1000 +Subject: Fix for Haiku + + +diff --git a/Aquaria/DSQ.cpp b/Aquaria/DSQ.cpp +index dc18033..4fb29c8 100644 +--- a/Aquaria/DSQ.cpp ++++ b/Aquaria/DSQ.cpp +@@ -49,6 +49,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + #include "ttvfs.h" + #endif + ++#ifdef __HAIKU__ ++#include ++#include ++#endif ++ + #ifdef BBGE_BUILD_UNIX + #include + #include +@@ -966,7 +971,11 @@ This build is not yet final, and as such there are a couple things lacking. They + // PHYSFS_addToSearchPath("gfx.zpk",0 ); + + bool mipmapsEnabled=true; ++#ifdef __HAIKU__ ++ bool fullscreen = false; ++#else + bool fullscreen = true; ++#endif + int joystickMode = 0; + int dsq_filter = 0; + voiceOversEnabled = true; +@@ -1014,6 +1023,20 @@ This build is not yet final, and as such there are a couple things lacking. They + else + debugLog("VoiceOvers Disabled"); + ++#ifdef __HAIKU__ ++ SDL_Init(SDL_INIT_VIDEO); ++ ++ BScreen *scr = new BScreen(B_MAIN_SCREEN_ID); ++ if (fullscreen) { ++ user.video.resx = scr->Frame().Width() + 1; ++ user.video.resy = scr->Frame().Height() + 1; ++ } else { ++ if (user.video.resx >= scr->Frame().Width() + 1 && user.video.resy >= scr->Frame().Height() + 1) { ++ user.video.resx = 800; ++ user.video.resy = 600; ++ } ++ } ++#endif + + #ifdef _DEBUG + if (!createWindow(800, 600, user.video.bits, false, "Aquaria")) +@@ -1035,7 +1058,7 @@ This build is not yet final, and as such there are a couple things lacking. They + debugLog("OK"); + */ + +-#ifdef BBGE_BUILD_SDL ++#if defined(BBGE_BUILD_SDL) && !defined(__HAIKU__) + SDL_Init(SDL_INIT_VIDEO); + if (fullscreen && !sdlVideoModeOK(user.video.resx, user.video.resy, user.video.bits)) + { +diff --git a/Aquaria/Game.cpp b/Aquaria/Game.cpp +index b6847f4..4df3fa1 100644 +--- a/Aquaria/Game.cpp ++++ b/Aquaria/Game.cpp +@@ -40,6 +40,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + #include "ToolTip.h" + ++#ifdef __HAIKU__ ++#include ++#include ++#endif ++ + std::vector allowedMaps; + + Vector worldLeftCenter(217,250), worldRightCenter(575, 250); +@@ -8752,6 +8757,18 @@ void Game::onOptionsSave() + || dsq->user.video.full != dsq->user_backup.video.full + || dsq->user.video.vsync != dsq->user_backup.video.vsync) + { ++#ifdef __HAIKU__ ++ if (dsq->user.video.full != dsq->user_backup.video.full) { ++ if (dsq->user.video.full) { ++ BScreen scr(B_MAIN_SCREEN_ID); ++ dsq->user.video.resx = scr.Frame().Width() + 1; ++ dsq->user.video.resy = scr.Frame().Height() + 1; ++ } else { ++ dsq->user.video.resx = 800; ++ dsq->user.video.resy = 600; ++ } ++ } ++#endif + dsq->resetGraphics(dsq->user.video.resx, dsq->user.video.resy, dsq->user.video.full); + if (dsq->confirm("", "graphics", false, 10)) { + } else { +diff --git a/BBGE/Core.cpp b/BBGE/Core.cpp +index 2e3be81..450af28 100644 +--- a/BBGE/Core.cpp ++++ b/BBGE/Core.cpp +@@ -39,6 +39,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + #include + #endif + ++#ifdef __HAIKU__ ++#include ++#include ++#endif ++ + #if BBGE_BUILD_WINDOWS + #include + #include +@@ -912,6 +917,8 @@ Core::Core(const std::string &filesystem, const std::string& extraDataDir, int n + // "/home/icculus/.Aquaria" or something. Spaces are okay. + #ifdef BBGE_BUILD_MACOSX + const std::string prefix("Library/Application Support/"); ++ #elif defined(__HAIKU__) ++ const std::string prefix("config/settings/"); + #else + const std::string prefix("."); + #endif +@@ -1975,7 +1982,7 @@ bool Core::initGraphicsLibrary(int width, int height, bool fullscreen, int vsync + Uint32 flags = 0; + flags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN; + if (fullscreen) +- flags |= SDL_WINDOW_FULLSCREEN; ++ flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; + gScreen = SDL_CreateWindow(appName.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, flags); + if (gScreen == NULL) + { +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 941fc25..5a7ae55 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -740,6 +740,10 @@ IF(WIN32) + SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "ws2_32") + ENDIF(WIN32) + ++IF(HAIKU) ++ SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "be") ++ENDIF(HAIKU) ++ + IF(MACOSX) + SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-framework Carbon") + SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-framework Cocoa") +-- +2.30.0 +