diff --git a/.gitattributes b/.gitattributes index 3833b81..60957e6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,6 +5,7 @@ *.h text eol=lf *.md text eol=lf *.json text eol=lf +*.plist text eol=lf *.yml text eol=lf .clang-format text eol=lf .editorconfig text eol=lf diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index 4be625f..15957b9 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -214,3 +214,29 @@ jobs: name: fallout2-ce-${{ matrix.cfg.artifact-os }} path: "${{ matrix.cfg.artifact-os }}/x${{ matrix.cfg.arch }}" retention-days: 7 + + macos: + runs-on: macos-latest + + steps: + - name: Clone + uses: actions/checkout@v3 + + - name: Dependencies + run: | + brew install sdl2 + + - name: Configure + run: | + cmake -B build/macos -DCMAKE_BUILD_TYPE=RelWithDebInfo + + - name: Build + run: | + cmake --build build/macos -j $(sysctl -n hw.physicalcpu) --target package + + - name: Upload + uses: actions/upload-artifact@v3 + with: + name: fallout2-ce-macos + path: build/macos/_CPack_Packages/Darwin/DragNDrop/fallout2-ce/fallout2-ce.dmg + retention-days: 7 diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f916c7..33f0a49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_CXX_EXTENSIONS NO) -add_executable(${EXECUTABLE_NAME} WIN32 +add_executable(${EXECUTABLE_NAME} WIN32 MACOSX_BUNDLE "src/actions.cc" "src/actions.h" "src/animation.cc" @@ -262,6 +262,14 @@ if(WIN32) ) endif() +if(APPLE) + set_target_properties(${EXECUTABLE_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/os/macos/Info.plist") + set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.alexbatalov.fallout2-ce") + set(MACOSX_BUNDLE_BUNDLE_NAME "${EXECUTABLE_NAME}") + set(MACOSX_BUNDLE_DISPLAY_NAME "Fallout 2") + set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0") +endif() + add_subdirectory("third_party/fpattern") target_link_libraries(${EXECUTABLE_NAME} ${FPATTERN_LIBRARY}) target_include_directories(${EXECUTABLE_NAME} PRIVATE ${FPATTERN_INCLUDE_DIR}) @@ -279,3 +287,18 @@ target_include_directories(${EXECUTABLE_NAME} PRIVATE ${ZLIB_INCLUDE_DIRS}) target_link_libraries(${EXECUTABLE_NAME} ${SDL2_LIBRARIES}) target_include_directories(${EXECUTABLE_NAME} PRIVATE ${SDL2_INCLUDE_DIRS}) + +if(APPLE) + install(TARGETS ${EXECUTABLE_NAME} DESTINATION .) + install(CODE " + include(BundleUtilities) + fixup_bundle(${CMAKE_BINARY_DIR}/${MACOSX_BUNDLE_BUNDLE_NAME}.app \"\" \"\") + " + COMPONENT Runtime) + + set(CPACK_GENERATOR "DragNDrop") + set(CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK ON) + set(CPACK_PACKAGE_FILE_NAME "fallout2-ce") + + include(CPack) +endif() diff --git a/os/macos/Info.plist b/os/macos/Info.plist new file mode 100644 index 0000000..3a1ad72 --- /dev/null +++ b/os/macos/Info.plist @@ -0,0 +1,36 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDisplayName + ${MACOSX_BUNDLE_DISPLAY_NAME} + CFBundleExecutable + ${MACOSX_BUNDLE_EXECUTABLE_NAME} + CFBundleGetInfoString + ${MACOSX_BUNDLE_INFO_STRING} + CFBundleIconFile + ${MACOSX_BUNDLE_ICON_FILE} + CFBundleIdentifier + ${MACOSX_BUNDLE_GUI_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${MACOSX_BUNDLE_BUNDLE_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + ${MACOSX_BUNDLE_SHORT_VERSION_STRING} + CFBundleVersion + ${MACOSX_BUNDLE_BUNDLE_VERSION} + NSHumanReadableCopyright + ${MACOSX_BUNDLE_COPYRIGHT} + NSHighResolutionCapable + True + LSMinimumSystemVersion + 12 + SDL_FILESYSTEM_BASE_DIR_TYPE + parent + + diff --git a/src/win32.cc b/src/win32.cc index 32d5da0..298d88a 100644 --- a/src/win32.cc +++ b/src/win32.cc @@ -84,6 +84,12 @@ bool gProgramIsActive = false; int main(int argc, char* argv[]) { +#if __APPLE__ + char* basePath = SDL_GetBasePath(); + chdir(basePath); + SDL_free(basePath); +#endif + SDL_ShowCursor(SDL_DISABLE); gProgramIsActive = true; return falloutMain(argc, argv);