Loading pkgs/by-name/mo/moon-child-fe/package.nix 0 → 100644 +104 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, cmake, sdl3, zlib, pkg-config, sdl_gamecontrollerdb, copyDesktopItems, makeDesktopItem, iconConvTools, }: let plMpegSrc = fetchFromGitHub { owner = "phoboslab"; repo = "pl_mpeg"; rev = "c871f2be022ece7ef4f64230b4fb8e1fb9eb6023"; hash = "sha256-Mr+hid5RRQ2Yh6UcNDFFbbHMrGGVju0o20KIAEvzEg8="; }; in stdenv.mkDerivation (finalAttrs: { pname = "moon-child-fe"; version = "1.0.5"; src = fetchFromGitHub { owner = "MorsGames"; repo = "MoonChildFE"; tag = "v${finalAttrs.version}"; hash = "sha256-SqoCSAFkQKcEbwDwHqicYXnQ8/HC523c+ePQFB+6rus="; }; __structuredAttrs = true; strictDeps = true; cmakeFlags = [ (lib.cmakeFeature "MOONCHILD_RENDERER_BACKEND" "SDL3") (lib.cmakeBool "MOONCHILD_VENDORED_SDL3" false) (lib.cmakeBool "MOONCHILD_VENDORED_ZLIB" false) (lib.cmakeBool "MOONCHILD_VENDORED_GAMECONTROLLERDB" false) (lib.cmakeBool "MOONCHILD_VENDORED_PL_MPEG" false) ]; env = { MOONCHILD_PL_MPEG_PATH = plMpegSrc; MOONCHILD_GAMECONTROLLERDB_PATH = "${sdl_gamecontrollerdb}/share/gamecontrollerdb.txt"; }; nativeBuildInputs = [ cmake pkg-config copyDesktopItems iconConvTools ]; buildInputs = [ sdl3 zlib sdl_gamecontrollerdb ]; installPhase = '' runHook preInstall mkdir -p $out/bin $out/share/icons/hicolor/256x256/apps/ cd /build/source mv ./Bin/Release $out/share/MoonChildFE icoFileToHiColorTheme game.ico MoonChildFE $out ln -s $out/share/MoonChildFE/MoonChildFE $out/bin/MoonChildFE runHook postInstall ''; desktopItems = [ (makeDesktopItem { name = "MoonChildFE"; desktopName = "Moon Child - Friend Edition"; exec = "MoonChildFE"; icon = "MoonChildFE"; comment = finalAttrs.meta.description; startupWMClass = "MoonChildFE"; categories = [ "Game" ]; }) ]; meta = { changelog = "https://github.com/MorsGames/MoonChildFE/releases/tag/v${finalAttrs.version}"; description = "Modern source port of the 1997 Windows 95 classic, Moon Child"; homepage = "https://github.com/MorsGames/MoonChildFE"; license = with lib.licenses; [ # Code mit # Assets cc-by-nc-40 ]; mainProgram = "MoonChildFE"; maintainers = [ lib.maintainers.pyrox0 ]; platforms = lib.platforms.linux; }; }) pkgs/by-name/mo/moon-child-fe/unvendor-deps.patch 0 → 100644 +132 −0 Original line number Diff line number Diff line diff --git c/CMakeLists.txt w/CMakeLists.txt index 63803d8..49982bc 100644 --- c/CMakeLists.txt +++ w/CMakeLists.txt @@ -25,6 +25,12 @@ option(MOONCHILD_INPUT_SDL3 "Use SDL3 input backend" ON) option(MOONCHILD_AUDIO_SDL3 "Use SDL3 audio backend" ON) +# Vendoring options +option(MOONCHILD_VENDORED_SDL3 "Use vendored SDL3 library" ON) +option(MOONCHILD_VENDORED_ZLIB "Use vendored zlib library" ON) +option(MOONCHILD_VENDORED_GAMECONTROLLERDB "Use vendored SDL_GameControllerDB" ON) +option(MOONCHILD_VENDORED_PL_MPEG "Use vendored pl_mpeg library" ON) + # Aggregate flags if(MOONCHILD_WINDOW_SDL3 OR MOONCHILD_RENDERER_SDL3 OR MOONCHILD_INPUT_SDL3 OR MOONCHILD_AUDIO_SDL3) set(MOONCHILD_USE_SDL3 ON) @@ -57,6 +63,7 @@ endif() # SDL3 stuff if(MOONCHILD_USE_SDL3) + if(MOONCHILD_VENDORED_SDL3) set(SDL_SHARED OFF CACHE BOOL "" FORCE) set(SDL_STATIC ON CACHE BOOL "" FORCE) set(SDL_TEST_LIBRARY OFF CACHE BOOL "" FORCE) @@ -74,13 +81,28 @@ if(MOONCHILD_USE_SDL3) else() message(FATAL_ERROR "Could not find an SDL3 target to link!") endif() + else() + find_package(SDL3) + endif() endif() # zlib stuff -set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) -set(ZLIB_BUILD_SHARED OFF CACHE BOOL "" FORCE) -set(ZLIB_BUILD_STATIC ON CACHE BOOL "" FORCE) -add_subdirectory("${LIBRARY_DIR}/zlib" "${CMAKE_BINARY_DIR}/zlib" EXCLUDE_FROM_ALL) +if(MOONCHILD_VENDORED_ZLIB) + set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) + set(ZLIB_BUILD_SHARED OFF CACHE BOOL "" FORCE) + set(ZLIB_BUILD_STATIC ON CACHE BOOL "" FORCE) + add_subdirectory("${LIBRARY_DIR}/zlib" "${CMAKE_BINARY_DIR}/zlib" EXCLUDE_FROM_ALL) +else() + find_package(ZLIB) +endif() + +# SDL_gamecontrollerdb path +if(MOONCHILD_VENDORED_GAMECONTROLLERDB) + set(MOONCHILD_GAMECONTROLLERDB_PATH "gamecontrollerdb.txt") +else() + set(MOONCHILD_GAMECONTROLLERDB_PATH "$ENV{MOONCHILD_GAMECONTROLLERDB_PATH}") + file(TO_CMAKE_PATH "${MOONCHILD_GAMECONTROLLERDB_PATH}" MOONCHILD_GAMECONTROLLERDB_PATH) +endif() # Game + framework # TODO: Unglobify this @@ -171,6 +193,15 @@ target_include_directories(${EXECUTABLE_NAME} PRIVATE ${LIBRARY_DIR}/pl_mpeg ${BACKEND_INCLUDES} ) +if(MOONCHILD_VENDORED_PL_MPEG) + target_include_directories(${EXECUTABLE_NAME} PRIVATE + ${LIBRARY_DIR}/pl_mpeg + ) +else() + target_include_directories(${EXECUTABLE_NAME} PRIVATE + $ENV{MOONCHILD_PL_MPEG_PATH} + ) +endif() # Backend selection macros if(MOONCHILD_WINDOW_SDL3) @@ -185,6 +216,11 @@ if(MOONCHILD_RENDERER_SDL3) endif() if(MOONCHILD_INPUT_SDL3) target_compile_definitions(${EXECUTABLE_NAME} PRIVATE MOONCHILD_INPUT_SDL3) + if(NOT MOONCHILD_GAMECONTROLLERDB_PATH STREQUAL "") + target_compile_definitions(${EXECUTABLE_NAME} PRIVATE + MOONCHILD_GAMECONTROLLERDB_PATH=\"${MOONCHILD_GAMECONTROLLERDB_PATH}\" + ) + endif() endif() if(MOONCHILD_AUDIO_SDL3) target_compile_definitions(${EXECUTABLE_NAME} PRIVATE MOONCHILD_AUDIO_SDL3) @@ -201,10 +237,16 @@ if(MSVC) target_compile_definitions(${EXECUTABLE_NAME} PRIVATE _CRT_SECURE_NO_WARNINGS) endif() -target_link_libraries(${EXECUTABLE_NAME} PRIVATE zlibstatic) +if(MOONCHILD_VENDORED_ZLIB) + target_link_libraries(${EXECUTABLE_NAME} PRIVATE zlibstatic) +else() + target_link_libraries(${EXECUTABLE_NAME} PRIVATE ZLIB::ZLIB) +endif() -if(MOONCHILD_USE_SDL3) +if(MOONCHILD_USE_SDL3 AND MOONCHILD_VENDORED_SDL3) target_link_libraries(${EXECUTABLE_NAME} PRIVATE ${MOONCHILD_SDL_TARGET}) +elseif(MOONCHILD_USE_SDL3 AND NOT MOONCHILD_VENDORED_SDL3) + target_link_libraries(${EXECUTABLE_NAME} PRIVATE SDL3::SDL3) endif() # Platform specific configuration @@ -239,7 +281,7 @@ set_target_properties(${EXECUTABLE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE ${MOONCHILD_BIN_DIR}/Release ) -if(MOONCHILD_INPUT_SDL3 AND NOT EMSCRIPTEN) +if(MOONCHILD_INPUT_SDL3 AND NOT EMSCRIPTEN AND MOONCHILD_VENDORED_GAMECONTROLLERDB) add_custom_command(TARGET ${EXECUTABLE_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LIBRARY_DIR}/SDL_GameControllerDB/gamecontrollerdb.txt" diff --git c/Platform/Backends/Input/SDL3Input.cpp w/Platform/Backends/Input/SDL3Input.cpp index d214516..1412c00 100644 --- c/Platform/Backends/Input/SDL3Input.cpp +++ w/Platform/Backends/Input/SDL3Input.cpp @@ -19,10 +19,12 @@ bool SDL3Input::Init() return false; } - if (SDL_AddGamepadMappingsFromFile("gamecontrollerdb.txt") < 0) +#ifdef MOONCHILD_GAMECONTROLLERDB_PATH + if (SDL_AddGamepadMappingsFromFile(MOONCHILD_GAMECONTROLLERDB_PATH) < 0) { printf("SDL gamepad mapping load failed! %s\n", SDL_GetError()); } +#endif int count = 0; if (SDL_JoystickID* ids = SDL_GetGamepads(&count)) Loading
pkgs/by-name/mo/moon-child-fe/package.nix 0 → 100644 +104 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, cmake, sdl3, zlib, pkg-config, sdl_gamecontrollerdb, copyDesktopItems, makeDesktopItem, iconConvTools, }: let plMpegSrc = fetchFromGitHub { owner = "phoboslab"; repo = "pl_mpeg"; rev = "c871f2be022ece7ef4f64230b4fb8e1fb9eb6023"; hash = "sha256-Mr+hid5RRQ2Yh6UcNDFFbbHMrGGVju0o20KIAEvzEg8="; }; in stdenv.mkDerivation (finalAttrs: { pname = "moon-child-fe"; version = "1.0.5"; src = fetchFromGitHub { owner = "MorsGames"; repo = "MoonChildFE"; tag = "v${finalAttrs.version}"; hash = "sha256-SqoCSAFkQKcEbwDwHqicYXnQ8/HC523c+ePQFB+6rus="; }; __structuredAttrs = true; strictDeps = true; cmakeFlags = [ (lib.cmakeFeature "MOONCHILD_RENDERER_BACKEND" "SDL3") (lib.cmakeBool "MOONCHILD_VENDORED_SDL3" false) (lib.cmakeBool "MOONCHILD_VENDORED_ZLIB" false) (lib.cmakeBool "MOONCHILD_VENDORED_GAMECONTROLLERDB" false) (lib.cmakeBool "MOONCHILD_VENDORED_PL_MPEG" false) ]; env = { MOONCHILD_PL_MPEG_PATH = plMpegSrc; MOONCHILD_GAMECONTROLLERDB_PATH = "${sdl_gamecontrollerdb}/share/gamecontrollerdb.txt"; }; nativeBuildInputs = [ cmake pkg-config copyDesktopItems iconConvTools ]; buildInputs = [ sdl3 zlib sdl_gamecontrollerdb ]; installPhase = '' runHook preInstall mkdir -p $out/bin $out/share/icons/hicolor/256x256/apps/ cd /build/source mv ./Bin/Release $out/share/MoonChildFE icoFileToHiColorTheme game.ico MoonChildFE $out ln -s $out/share/MoonChildFE/MoonChildFE $out/bin/MoonChildFE runHook postInstall ''; desktopItems = [ (makeDesktopItem { name = "MoonChildFE"; desktopName = "Moon Child - Friend Edition"; exec = "MoonChildFE"; icon = "MoonChildFE"; comment = finalAttrs.meta.description; startupWMClass = "MoonChildFE"; categories = [ "Game" ]; }) ]; meta = { changelog = "https://github.com/MorsGames/MoonChildFE/releases/tag/v${finalAttrs.version}"; description = "Modern source port of the 1997 Windows 95 classic, Moon Child"; homepage = "https://github.com/MorsGames/MoonChildFE"; license = with lib.licenses; [ # Code mit # Assets cc-by-nc-40 ]; mainProgram = "MoonChildFE"; maintainers = [ lib.maintainers.pyrox0 ]; platforms = lib.platforms.linux; }; })
pkgs/by-name/mo/moon-child-fe/unvendor-deps.patch 0 → 100644 +132 −0 Original line number Diff line number Diff line diff --git c/CMakeLists.txt w/CMakeLists.txt index 63803d8..49982bc 100644 --- c/CMakeLists.txt +++ w/CMakeLists.txt @@ -25,6 +25,12 @@ option(MOONCHILD_INPUT_SDL3 "Use SDL3 input backend" ON) option(MOONCHILD_AUDIO_SDL3 "Use SDL3 audio backend" ON) +# Vendoring options +option(MOONCHILD_VENDORED_SDL3 "Use vendored SDL3 library" ON) +option(MOONCHILD_VENDORED_ZLIB "Use vendored zlib library" ON) +option(MOONCHILD_VENDORED_GAMECONTROLLERDB "Use vendored SDL_GameControllerDB" ON) +option(MOONCHILD_VENDORED_PL_MPEG "Use vendored pl_mpeg library" ON) + # Aggregate flags if(MOONCHILD_WINDOW_SDL3 OR MOONCHILD_RENDERER_SDL3 OR MOONCHILD_INPUT_SDL3 OR MOONCHILD_AUDIO_SDL3) set(MOONCHILD_USE_SDL3 ON) @@ -57,6 +63,7 @@ endif() # SDL3 stuff if(MOONCHILD_USE_SDL3) + if(MOONCHILD_VENDORED_SDL3) set(SDL_SHARED OFF CACHE BOOL "" FORCE) set(SDL_STATIC ON CACHE BOOL "" FORCE) set(SDL_TEST_LIBRARY OFF CACHE BOOL "" FORCE) @@ -74,13 +81,28 @@ if(MOONCHILD_USE_SDL3) else() message(FATAL_ERROR "Could not find an SDL3 target to link!") endif() + else() + find_package(SDL3) + endif() endif() # zlib stuff -set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) -set(ZLIB_BUILD_SHARED OFF CACHE BOOL "" FORCE) -set(ZLIB_BUILD_STATIC ON CACHE BOOL "" FORCE) -add_subdirectory("${LIBRARY_DIR}/zlib" "${CMAKE_BINARY_DIR}/zlib" EXCLUDE_FROM_ALL) +if(MOONCHILD_VENDORED_ZLIB) + set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) + set(ZLIB_BUILD_SHARED OFF CACHE BOOL "" FORCE) + set(ZLIB_BUILD_STATIC ON CACHE BOOL "" FORCE) + add_subdirectory("${LIBRARY_DIR}/zlib" "${CMAKE_BINARY_DIR}/zlib" EXCLUDE_FROM_ALL) +else() + find_package(ZLIB) +endif() + +# SDL_gamecontrollerdb path +if(MOONCHILD_VENDORED_GAMECONTROLLERDB) + set(MOONCHILD_GAMECONTROLLERDB_PATH "gamecontrollerdb.txt") +else() + set(MOONCHILD_GAMECONTROLLERDB_PATH "$ENV{MOONCHILD_GAMECONTROLLERDB_PATH}") + file(TO_CMAKE_PATH "${MOONCHILD_GAMECONTROLLERDB_PATH}" MOONCHILD_GAMECONTROLLERDB_PATH) +endif() # Game + framework # TODO: Unglobify this @@ -171,6 +193,15 @@ target_include_directories(${EXECUTABLE_NAME} PRIVATE ${LIBRARY_DIR}/pl_mpeg ${BACKEND_INCLUDES} ) +if(MOONCHILD_VENDORED_PL_MPEG) + target_include_directories(${EXECUTABLE_NAME} PRIVATE + ${LIBRARY_DIR}/pl_mpeg + ) +else() + target_include_directories(${EXECUTABLE_NAME} PRIVATE + $ENV{MOONCHILD_PL_MPEG_PATH} + ) +endif() # Backend selection macros if(MOONCHILD_WINDOW_SDL3) @@ -185,6 +216,11 @@ if(MOONCHILD_RENDERER_SDL3) endif() if(MOONCHILD_INPUT_SDL3) target_compile_definitions(${EXECUTABLE_NAME} PRIVATE MOONCHILD_INPUT_SDL3) + if(NOT MOONCHILD_GAMECONTROLLERDB_PATH STREQUAL "") + target_compile_definitions(${EXECUTABLE_NAME} PRIVATE + MOONCHILD_GAMECONTROLLERDB_PATH=\"${MOONCHILD_GAMECONTROLLERDB_PATH}\" + ) + endif() endif() if(MOONCHILD_AUDIO_SDL3) target_compile_definitions(${EXECUTABLE_NAME} PRIVATE MOONCHILD_AUDIO_SDL3) @@ -201,10 +237,16 @@ if(MSVC) target_compile_definitions(${EXECUTABLE_NAME} PRIVATE _CRT_SECURE_NO_WARNINGS) endif() -target_link_libraries(${EXECUTABLE_NAME} PRIVATE zlibstatic) +if(MOONCHILD_VENDORED_ZLIB) + target_link_libraries(${EXECUTABLE_NAME} PRIVATE zlibstatic) +else() + target_link_libraries(${EXECUTABLE_NAME} PRIVATE ZLIB::ZLIB) +endif() -if(MOONCHILD_USE_SDL3) +if(MOONCHILD_USE_SDL3 AND MOONCHILD_VENDORED_SDL3) target_link_libraries(${EXECUTABLE_NAME} PRIVATE ${MOONCHILD_SDL_TARGET}) +elseif(MOONCHILD_USE_SDL3 AND NOT MOONCHILD_VENDORED_SDL3) + target_link_libraries(${EXECUTABLE_NAME} PRIVATE SDL3::SDL3) endif() # Platform specific configuration @@ -239,7 +281,7 @@ set_target_properties(${EXECUTABLE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE ${MOONCHILD_BIN_DIR}/Release ) -if(MOONCHILD_INPUT_SDL3 AND NOT EMSCRIPTEN) +if(MOONCHILD_INPUT_SDL3 AND NOT EMSCRIPTEN AND MOONCHILD_VENDORED_GAMECONTROLLERDB) add_custom_command(TARGET ${EXECUTABLE_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LIBRARY_DIR}/SDL_GameControllerDB/gamecontrollerdb.txt" diff --git c/Platform/Backends/Input/SDL3Input.cpp w/Platform/Backends/Input/SDL3Input.cpp index d214516..1412c00 100644 --- c/Platform/Backends/Input/SDL3Input.cpp +++ w/Platform/Backends/Input/SDL3Input.cpp @@ -19,10 +19,12 @@ bool SDL3Input::Init() return false; } - if (SDL_AddGamepadMappingsFromFile("gamecontrollerdb.txt") < 0) +#ifdef MOONCHILD_GAMECONTROLLERDB_PATH + if (SDL_AddGamepadMappingsFromFile(MOONCHILD_GAMECONTROLLERDB_PATH) < 0) { printf("SDL gamepad mapping load failed! %s\n", SDL_GetError()); } +#endif int count = 0; if (SDL_JoystickID* ids = SDL_GetGamepads(&count))