diff --git a/.github/workflows/macos-build.yml b/.github/workflows/macos-build.yml index 5d27d520c..b0c715383 100644 --- a/.github/workflows/macos-build.yml +++ b/.github/workflows/macos-build.yml @@ -1,8 +1,13 @@ name: macOS Latest Build on: [push, pull_request] +#on: workflow_dispatch jobs: build: + strategy: + matrix: + cmake_build: ['-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_BUILD_TYPE=Debug'] + cmake_options: ['', '-DENABLE_LINK=OFF', '-DENABLE_SDL=ON'] runs-on: macos-latest steps: @@ -10,14 +15,13 @@ jobs: uses: actions/checkout@v2 with: submodules: recursive - - - name: Install Dependencies - run: >- - bash installdeps - + - name: Install nix + uses: cachix/install-nix-action@v22 + with: + nix_path: nixpkgs=channel:nixos-unstable - name: Configure run: >- - cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug - + nix-shell --command 'cmake -B build -G Ninja ${{ matrix.cmake_build }} ${{ matrix.cmake_options }}' - name: Build - run: ninja -C build + run: >- + nix-shell --command 'ninja -C build' diff --git a/.github/workflows/msys2-build.yml b/.github/workflows/msys2-build.yml index 6283d3cf7..805fcf9b1 100644 --- a/.github/workflows/msys2-build.yml +++ b/.github/workflows/msys2-build.yml @@ -1,41 +1,37 @@ -name: MSYS2 Build -on: [push, pull_request] - -jobs: - build: - runs-on: windows-latest - env: - MSYSTEM: CLANG64 - defaults: - run: - shell: msys2 {0} - - steps: - - name: Checkout the code - uses: actions/checkout@v2 - with: - submodules: recursive - - name: Setup msys2 - uses: msys2/setup-msys2@v2 - with: - msystem: CLANG64 - update: true - install: >- - mingw-w64-clang-x86_64-toolchain - mingw-w64-clang-x86_64-pkgconf - mingw-w64-clang-x86_64-ffmpeg - mingw-w64-clang-x86_64-FAudio - mingw-w64-clang-x86_64-cmake - mingw-w64-clang-x86_64-ninja - mingw-w64-clang-x86_64-wxWidgets3.2 - mingw-w64-clang-x86_64-sfml - mingw-w64-clang-x86_64-SDL2 - zip - - name: Configure - run: >- - cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DVBAM_STATIC=ON -DENABLE_SSP=ON -DENABLE_ONLINEUPDATES=OFF - - name: Build - run: ninja -C build - - - name: Install - run: ninja -C build install \ No newline at end of file +name: MSYS2 Build +on: [push, pull_request] + +jobs: + build: + strategy: + matrix: + cmake_build: ['-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_BUILD_TYPE=Debug'] + cmake_options: ['', '-DENABLE_LINK=OFF', '-DENABLE_SDL=ON'] + runs-on: windows-latest + env: + MSYSTEM: CLANG64 + defaults: + run: + shell: msys2 {0} + + steps: + - name: Checkout the code + uses: actions/checkout@v2 + with: + submodules: recursive + - name: Setup msys2 + uses: msys2/setup-msys2@v2 + with: + msystem: CLANG64 + update: true + - name: Install deps + run: >- + bash installdeps + - name: Configure + run: >- + cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug ${{ matrix.cmake_build }} ${{ matrix.cmake_options }} + - name: Build + run: ninja -C build + + - name: Install + run: ninja -C build install diff --git a/.github/workflows/ubuntu-build.yml b/.github/workflows/ubuntu-build.yml index 319268f05..3e27b99fb 100644 --- a/.github/workflows/ubuntu-build.yml +++ b/.github/workflows/ubuntu-build.yml @@ -3,8 +3,12 @@ on: [push, pull_request] jobs: build: + strategy: + matrix: + cmake_compiler: ['-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++', '-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++'] + cmake_build: ['-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_BUILD_TYPE=Debug'] + cmake_options: ['', '-DENABLE_LINK=OFF', '-DENABLE_SDL=ON'] runs-on: ubuntu-latest - steps: - name: Checkout the code uses: actions/checkout@v2 @@ -13,11 +17,11 @@ jobs: - name: Install Dependencies run: >- - bash installdeps + bash installdeps; if [ "${{ matrix.compiler }}" = clang ]; then sudo apt -y install clang; fi - name: Configure run: >- - cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug + cmake -B build -G Ninja ${{ matrix.cmake_compiler }} ${{ matrix.cmake_build }} ${{ matrix.cmake_options }} - name: Build run: ninja -C build diff --git a/.github/workflows/visual-studio-build.yml b/.github/workflows/visual-studio-build.yml new file mode 100644 index 000000000..f512e1945 --- /dev/null +++ b/.github/workflows/visual-studio-build.yml @@ -0,0 +1,36 @@ +name: Visual Studio Build +on: [push, pull_request] + +jobs: + build: + strategy: + matrix: + msvc_arch: ['x64', 'x64_x86'] + cmake_generator: ['Ninja'] +# cmake_generator: ['Ninja', '"Visual Studio 17 2022"'] + cmake_build: ['-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_BUILD_TYPE=Debug'] + cmake_options: ['', '-DENABLE_LINK=OFF', '-DENABLE_SDL=ON'] + runs-on: windows-latest + steps: + - name: Checkout the code + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Prepare Visual Studio environment + uses: ilammy/msvc-dev-cmd@v1.12.0 + with: + arch: ${{ matrix.msvc_arch }} + + - name: Configure (x64) + if: matrix.msvc_arch == 'x64' + run: >- + cmake -B build -G ${{ matrix.cmake_generator }} -DVCPKG_TARGET_TRIPLET=x64-windows-static ${{ matrix.cmake_build }} ${{ matrix.cmake_options }} + + - name: Configure (x86) + if: matrix.msvc_arch == 'x64_x86' + run: >- + cmake -B build -G ${{ matrix.cmake_generator }} -DVCPKG_TARGET_TRIPLET=x86-windows-static ${{ matrix.cmake_build }} ${{ matrix.cmake_options }} + + - name: Build + run: cmake --build build diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 89a8c21c0..2e64b946d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -56,7 +56,19 @@ include: # PlayStation Vita - project: 'libretro-infrastructure/ci-templates' file: '/vita-static.yml' - + + # Nintendo GameCube + - project: 'libretro-infrastructure/ci-templates' + file: '/ngc-static.yml' + + # Nintendo Wii + - project: 'libretro-infrastructure/ci-templates' + file: '/wii-static.yml' + + # Nintendo WiiU + - project: 'libretro-infrastructure/ci-templates' + file: '/wiiu-static.yml' + # Nintendo Switch - project: 'libretro-infrastructure/ci-templates' file: '/libnx-static.yml' @@ -164,6 +176,24 @@ libretro-build-vita: - .libretro-vita-static-retroarch-master - .core-defs +# Nintendo GameCube +libretro-build-ngc: + extends: + - .libretro-ngc-static-retroarch-master + - .core-defs + +# Nintendo Wii +libretro-build-wii: + extends: + - .libretro-wii-static-retroarch-master + - .core-defs + +# Nintendo WiiU +libretro-build-wiiu: + extends: + - .libretro-wiiu-static-retroarch-master + - .core-defs + # Nintendo Switch libretro-build-libnx-aarch64: extends: diff --git a/CHANGELOG.md b/CHANGELOG.md index 6155b3e08..2a15dc192 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,61 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [2.1.8] - 2023-12-13 + +======================== +* beab0881 - Store the PC register at the appropriate offset [steelskin] +* bf2452aa - Resize GameArea after MainFrame initialization [steelskin] +* 71ca0fb2 - Properly hide the status bar at startup [steelskin] +* 7e1afcd3 - Fix reading joystick hat config values [rkitover] +* 32581966 - Link: Fix menu not refreshing correctly [74248064+nuive] + +## [2.1.7] - 11.09.2023 + +========================= +* aca206a7 - Launch on xwayland under Wayland if no EGL [rkitover] +* 93a24bee - Disable mirroring for ROMs > 32MB [rkitover] +* 0f4ec575 - [Build] Fix the NO_LINK build [steelskin] +* 803ab352 - [GB] Save MBC7 EEPROM data to `gbRam` [steelskin] +* 24b6ac5a - [GBA] Implement missing Thumb instruction [steelskin] +* 14a4b6f8 - [dialogs] Move JoypadConfig to its own class. [steelskin] + +## [2.1.6] - 09.07.2023 + +========================= +* 7561ca97 - Fix Discord streaming for OpenGL [danialhorton] +* e26f8073 - [bios] Fix lz77 and add BIOS_SndDriverVsyncOn [steelskin] +* d1f65000 - Refactor accelerator / global shortcuts handling [steelskin] +* fda429fc - [GBA] Do not draw BG tiles from outside of BG VRAM [steelskin] +* 5aa3ea92 - Properly initialize wxAcceleratorTable [steelskin] +* 0e29be87 - Support multiple RAM sizes for MBC7 [steelskin] +* 75b79d91 - Change MBC7 reported RAM size to 512 bytes [steelskin] +* 36e88faf - Fix dsound looping when moving/resizing window [rkitover] +* 019fcda9 - Sanitize and improve the GB header parsing (#1109) [Steelskin] +* 7005b928 - Sanitize allocations in the Game Boy emulator (#1105) [Steelskin] +* 3cef52b7 - Fix pause/next-frame [rkitover] +* d3f8cc17 - Option to suspend the X11 screensaver when running [2306079+multiSnow] +* df819598 - builder: update macOS build to 10.10, Wx 3.2.2.1 [rkitover] +* 1ab46f70 - Update SIOCNT when the link driver is disconnected [steelskin] +* 1d7e8ae4 - build: fix build with new OpenAL [rkitover] +* a9284b3d - workaround for Stuart Little 2 crashing when set to none [danialhorton] +* 166299cd - Implements Read/Writes for HUC3 [danialhorton] +* 640ce453 - Change SOUND_CLOCK_TICKS to 280896 cycles - ~1074 samples per frame [reallibretroretroarch] +* f1d3f631 - Fix automatic dynamic frame skipping [steelskin] +* d756f671 - translations: fix some source strings [stanley.udr.kid] +* 91873254 - Add INI file versioning [steelskin] +* 7d9cb2b5 - Default GBA LCD filter to off. [rkitover] +* be1e5ca1 - Check for wx < 3.2.2 for EGL move fix backport [rkitover] +* 1fb18b32 - Rename appdata to metainfo [polynomial-c] +* ca7ae336 - Fix regression in bios, port DMA fix from libretro [danialhorton] +* b34448c9 - Fix record/play dialogs for native recordings [danialhorton] +* 6307348c - build: support MSVC arm64 cross build on x86 [rkitover] +* 87bdc93e - Revert "translations: use %% instead of percent" [rkitover] +* ab4ae96e - Clarify/set condition: wayland && !wayland_egl [rkitover] +* 8e4acfc9 - Fix build w/wxUSE_GLCANVAS_EGL=0, on Fedora [rkitover] +* 3c41b68d - Fix the Windows ARM64 build [steelskin] +* 22578d02 - Increase MAX_CART_SIZE from 32MiB to 128MiB [rkitover] + ## [2.1.5] - 2022-12-15 ======================= * ea2a929f - Backport 800d6ed69b from wx to fix Wayland EGL pos [rkitover] diff --git a/CMakeLists.txt b/CMakeLists.txt index adf76550f..0bcc7dec6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,7 +45,7 @@ if(TAG_RELEASE) include(MakeReleaseCommitAndTag) endif() -set(VCPKG_DEPS pkgconf zlib sdl2 gettext wxwidgets) +set(VCPKG_DEPS pkgconf zlib "sdl2[samplerate]" gettext wxwidgets) set(VCPKG_DEPS_OPTIONAL sfml ENABLE_LINK @@ -74,9 +74,11 @@ if(NOT CMAKE_CXX_COMPILER_LAUNCHER) endif() endif() -project(VBA-M C CXX) +cmake_minimum_required(VERSION 3.8.2) + +set(CMAKE_CXX_STANDARD 17) -cmake_minimum_required(VERSION 2.8.12) +project(VBA-M C CXX) if(NOT CMAKE_PREFIX_PATH AND (NOT ("$ENV{CMAKE_PREFIX_PATH}" STREQUAL ""))) set(CMAKE_PREFIX_PATH "$ENV{CMAKE_PREFIX_PATH}") @@ -456,7 +458,7 @@ if(ENABLE_FFMPEG) set(FFMPEG_LDFLAGS ${FFMPEG_LDFLAGS} -framework CoreText -framework ApplicationServices) if(UPSTREAM_RELEASE) - set(FFMPEG_LDFLAGS ${FFMPEG_LDFLAGS} -lbz2 -lvo-amrwbenc -lopencore-amrnb -lopencore-amrwb -lmodplug -lbluray -lgsm -lmp3lame -ltiff -lopus -lsnappy -lsoxr -lspeex -ltheora -lvorbis -lvpx -lx264 -lx265 -lxavs -lxvidcore -lzmq -framework DiskArbitration -lfreetype -lfontconfig -llzma -logg -lvorbisenc -lxml2 -lharfbuzz) + set(FFMPEG_LDFLAGS ${FFMPEG_LDFLAGS} -lbz2 -ltiff -framework DiskArbitration -lfreetype -lfontconfig -llzma -lxml2 -lharfbuzz) endif() elseif(WIN32) set(WIN32_MEDIA_FOUNDATION_LIBS dxva2 evr mf mfplat mfplay mfreadwrite mfuuid amstrmid) @@ -494,8 +496,13 @@ add_definitions(-D__STDC_FORMAT_MACROS) # For C++, default to nonstd::optional and nonstd::variant for now due to mac # build issues. -add_definitions(-Doptional_CONFIG_SELECT_OPTIONAL=optional_OPTIONAL_NONSTD) -add_definitions(-Dvariant_CONFIG_SELECT_VARIANT=variant_VARIANT_NONSTD) +if(APPLE) + add_definitions(-Doptional_CONFIG_SELECT_OPTIONAL=optional_OPTIONAL_NONSTD) + add_definitions(-Dvariant_CONFIG_SELECT_VARIANT=variant_VARIANT_NONSTD) +else() + add_definitions(-Doptional_CONFIG_SELECT_OPTIONAL=optional_OPTIONAL_STD) + add_definitions(-Dvariant_CONFIG_SELECT_VARIANT=variant_VARIANT_STD) +endif() if(ENABLE_LINK) # IPC linking code needs sem_timedwait which can be either in librt or pthreads @@ -1180,8 +1187,6 @@ if(NOT TRANSLATIONS_ONLY) ${HDR_STB_IMAGE} ) add_dependencies(vbamcore generate) - set_property(TARGET vbamcore PROPERTY CXX_STANDARD 11) - set_property(TARGET vbamcore PROPERTY CXX_STANDARD_REQUIRED ON) endif() if((NOT TRANSLATIONS_ONLY) AND ENABLE_SDL) @@ -1191,8 +1196,6 @@ if((NOT TRANSLATIONS_ONLY) AND ENABLE_SDL) ${SRC_SDL} ${HDR_SDL} ) - set_property(TARGET vbam PROPERTY CXX_STANDARD 11) - set_property(TARGET vbam PROPERTY CXX_STANDARD_REQUIRED ON) if(WIN32) set(WIN32_LIBRARIES wsock32 ws2_32 winmm version imm32) diff --git a/DEVELOPER-MANUAL.md b/DEVELOPER-MANUAL.md index cb90bfa99..514dd7f78 100644 --- a/DEVELOPER-MANUAL.md +++ b/DEVELOPER-MANUAL.md @@ -73,8 +73,61 @@ https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html the description of your work should be in the **commit message NOT the pull request description**. -Make sure your git history is clean and logical, edit when necessary with -`rebase -i`. +The title line must be no more than 50 characters and the description must be +wrapped at 72 characters. Most commit message editor interfaces will help you +with this. The title line must not end with a period. + +Write everything in the imperative mood, e.g. change, fix, **NOT** changes, +changed, fixed, fixes etc.. + +A commit message must always have a title and a description, the description +must be independent of the title line, if necessary repeat the information in +the title line in the description. + +Make sure the git history in your branch is clean and logical, edit when +necessary with `rebase -i`. + +Use one commit per logical change if necessary, most work can be squashed into +one commit when you are done. It is not necessary to have separate commits +per-file if they are one logical change. We are less strict about this than +other projects, fewer is better. + +The commit title line should be prefixed with an area, unless it involves the +wxWidgets GUI app, in which case it should **NOT** have a prefix. + +The text after the area prefix should not be capitalized. + +Please use one of these area prefixes otherwise: + +- doc: documentation, README.md etc. +- build: cmake, installdeps, preprocessor compatibility defines, etc. +- gb-core: the GameBoy emulator core +- gba-core: the GameBoy Advance emulator core +- libretro: the libretro core glue and build +- sdl-app: anything for the SDL app +- translations: anything related to translations + +. Add other areas here if needed. + +If a commit fixes a regression, use a title line such as: + +```console +Fix regression in +``` +, you can get the short sha from `git log --oneline -100` or similar. + +The commit description for a regression must refer to the breaking change in +reference format, which you can get from e.g. `git log --format=reference -20`. + +You can refer to github issues using `#` freely in the description +text. + +If a commit fixes an issue, add a line at the end of the description such as: + +```console +Fix #. +``` +. #### Collaboration on a Branch diff --git a/README.md b/README.md index 7b0e95ae2..b571d6b44 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ Our bridged Discord server is [Here](https://discord.gg/EpfxEuGMKH). We are also on *`#vba-m`* on [Libera IRC](https://libera.chat/) which has a [Web Chat](https://web.libera.chat/). +[![Get it from flathub](https://dl.flathub.org/assets/badges/flathub-badge-en.svg)](https://flathub.org/apps/com.vba_m.visualboyadvance-m) [![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/visualboyadvance-m) ***Want to know where you can install visualboyadvance-m in your linux distribution?*** @@ -42,7 +43,7 @@ Windows and Mac builds are in the [releases tab](https://github.com/visualboyadv Nightly builds for Windows and macOS are at [https://nightly.vba-m.com/](https://nightly.vba-m.com/). -**PLESE TEST THE NIGHTLY OR MASTER WITH A FACTORY RESET BEFORE REPORTING +**PLEASE TEST THE NIGHTLY OR MASTER WITH A FACTORY RESET BEFORE REPORTING ISSUES** Your distribution may have packages available as well, search for @@ -117,34 +118,21 @@ ninja ## Visual Studio Code Support -On most platforms, Visual Studio Code should work as-is, as long as the -[CMake Tools extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) -is installed. +Make sure the +[C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) +and [CMake +Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) +extensions are installed. -There is a recommended configuration in the `vscode/settings.json` file. To use -it, copy the file to a `.vscode/` folder. +Add the following to your `settings.json`: -By default, this will publish builds in the `build-vscode/` directory. In the -`vscode/settings.json` file, there is an alternate configuration for the -`"cmake.buildDirectory"` option that will use different build directories for -different toolchains and build configurations. - -### Optional: clangd - -The [clangd extension](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd) -uses clangd to provide powerful code completion, errors and warnings and -references on click in VS Code. - -With the recommended configuration, the build configuration will generate a -`compile_commands.json` file that can be used with clangd. After configuration, -you can copy that file to the root directory with a command similar to this one: - -```shell -cp build/build-vscode/compile_commands.json . +```json +{ + "cmake.configureOnOpen": true, + "cmake.preferredGenerators": [ "Ninja" ] +} ``` - -Then, select "clangd: Restart language server" from the command palette to get -completion in the IDE. +. ## Dependencies @@ -182,7 +170,7 @@ This is supported on Fedora, Arch, Solus and MSYS2. `./installdeps` takes one optional parameter for cross-compiling target, which may be `win32` which is an alias for `mingw-w64-i686` to target 32 bit Windows, -or `mingw-gw64-x86_64` for 64 bit Windows targets. +or `mingw-w64-x86_64` for 64 bit Windows targets. The target is implicit on MSys2 depending on which MINGW shell you started (the value of `$MSYSTEM`.) diff --git a/cmake/FindSDL2.cmake b/cmake/FindSDL2.cmake index 35794eff2..09b8063fd 100644 --- a/cmake/FindSDL2.cmake +++ b/cmake/FindSDL2.cmake @@ -202,6 +202,25 @@ IF(SDL2_LIBRARY_TEMP) SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP} -lversion -limm32) ENDIF(MINGW) + # Add libsamplerate with vcpkg + if(CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg") + if(WIN32) + unset(arch_suffix) + unset(path_prefix) + if(VCPKG_TARGET_TRIPLET MATCHES -static) + set(arch_suffix -static) + endif() + if(CMAKE_BUILD_TYPE MATCHES "^(Debug|RelWithDebInfo)$") + set(path_prefix debug) + endif() + set(installed_prefix ${_VCPKG_INSTALLED_DIR}/${WINARCH}-windows${arch_suffix}/${path_prefix}) + + SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${installed_prefix}/lib/samplerate.lib) + else() + SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} -lsamplerate) + endif() + endif() + # Add some stuff from pkg-config, if available IF(NOT PKG_CONFIG_EXECUTABLE) FIND_PACKAGE(PkgConfig QUIET) diff --git a/cmake/GitTagVersion.cmake b/cmake/GitTagVersion.cmake index 6eb25b3a7..c59fb06b2 100644 --- a/cmake/GitTagVersion.cmake +++ b/cmake/GitTagVersion.cmake @@ -6,7 +6,7 @@ function(git_version version revision version_release) find_package(Git) if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") # get latest version from tag history - execute_process(COMMAND "${GIT_EXECUTABLE}" tag "--format=%(align:width=20)%(refname:short)%(end)%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end)" --sort=-creatordate OUTPUT_VARIABLE tags OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") + execute_process(COMMAND "${GIT_EXECUTABLE}" tag "--format=%(align:width=20)%(refname:short)%(end)%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end)" --sort=-v:refname OUTPUT_VARIABLE tags OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") # if no tags (e.g. shallow clone) do nothing if(tags STREQUAL "") diff --git a/cmake/Set-Toolchain-vcpkg.cmake b/cmake/Set-Toolchain-vcpkg.cmake index 4371d4d42..054b4f3f0 100644 --- a/cmake/Set-Toolchain-vcpkg.cmake +++ b/cmake/Set-Toolchain-vcpkg.cmake @@ -2,37 +2,48 @@ if(POLICY CMP0012) cmake_policy(SET CMP0012 NEW) # Saner if() behavior. endif() +if(POLICY CMP0135) + cmake_policy(SET CMP0135 NEW) # Use timestamps from archives. +endif() + if(NOT DEFINED VCPKG_TARGET_TRIPLET) + if(NOT WIN32) + return() + endif() + # Check if we are in an MSVC environment. - if($ENV{CXX} MATCHES "cl.exe$") + find_program(cl_exe_path NAME cl.exe HINTS ENV PATH) + + if($ENV{CXX} MATCHES "cl.exe$" OR cl_exe_path) # Infer the architecture from the LIB folders. foreach(LIB $ENV{LIB}) if(${LIB} MATCHES "x64$") - set(VBAM_VCPKG_PLATFORM "x64-windows") + set(VBAM_VCPKG_PLATFORM "x64-windows-static") break() endif() if(${LIB} MATCHES "x86$") - set(VBAM_VCPKG_PLATFORM "x86-windows") + set(VBAM_VCPKG_PLATFORM "x86-windows-static") break() endif() if(${LIB} MATCHES "ARM64$") - set(VBAM_VCPKG_PLATFORM "arm64-windows") + set(VBAM_VCPKG_PLATFORM "arm64-windows-static") break() endif() endforeach() # If all else fails, try to use a sensible default. if(NOT DEFINED VBAM_VCPKG_PLATFORM) - set(VBAM_VCPKG_PLATFORM "x64-windows") + set(VBAM_VCPKG_PLATFORM "x64-windows-static") endif() + unset(cl_exe_path) elseif (NOT DEFINED CMAKE_CXX_COMPILER) # No way to infer the compiler. return() elseif(${CMAKE_CXX_COMPILER} MATCHES "clang-cl.exe$" OR ${CMAKE_CXX_COMPILER} MATCHES "clang-cl$") # For stand-alone clang-cl, assume x64. - set(VBAM_VCPKG_PLATFORM "x64-windows") + set(VBAM_VCPKG_PLATFORM "x64-windows-static") endif() if (NOT DEFINED VBAM_VCPKG_PLATFORM) @@ -40,11 +51,7 @@ if(NOT DEFINED VCPKG_TARGET_TRIPLET) return() endif() - if(DEFINED BUILD_SHARED_LIBS AND NOT ${BUILD_SHARED_LIBS}) - set(VBAM_VCPKG_PLATFORM ${VBAM_VCPKG_PLATFORM}-static) - endif() - - set(VCPKG_TARGET_TRIPLET ${VBAM_VCPKG_PLATFORM} CACHE STRING "Vcpkg target triplet (ex. x86-windows)" FORCE) + set(VCPKG_TARGET_TRIPLET ${VBAM_VCPKG_PLATFORM} CACHE STRING "Vcpkg target triplet (ex. x64-windows-static)" FORCE) message(STATUS "Inferred VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}") endif() @@ -56,7 +63,7 @@ function(vcpkg_seconds) ) else() execute_process( - COMMAND date +'%H:%M:%S' + COMMAND date +%H:%M:%S OUTPUT_VARIABLE time ) endif() @@ -71,7 +78,8 @@ function(vcpkg_seconds) endfunction() function(vcpkg_check_git_status git_status) - if(NOT git_status EQUAL 0) + # The VS vcpkg component cannot be written to without elevation. + if(NOT git_status EQUAL 0 AND NOT VCPKG_ROOT MATCHES "^C:/Program Files/Microsoft Visual Studio/") message(FATAL_ERROR "Error updating vcpkg from git, please make sure git for windows is installed correctly, it can be installed from Visual Studio components") endif() endfunction() @@ -128,6 +136,207 @@ function(vcpkg_deps_fixup vcpkg_exe) endif() endfunction() +function(vcpkg_is_installed vcpkg_exe pkg_name pkg_ver pkg_triplet powershell outvar) + set(${outvar} FALSE PARENT_SCOPE) + + unset(CMAKE_MATCH_1) + string(REGEX REPLACE "-r([0-9]+)\$" "" pkg_ver ${pkg_ver}) + set(pkg_rev ${CMAKE_MATCH_1}) + + string(REPLACE "-" "." pkg_ver ${pkg_ver}) + + if(NOT DEFINED VCPKG_INSTALLED_COUNT) + if(VCPKG_ROOT MATCHES "^C:/Program Files/Microsoft Visual Studio/") + execute_process( + COMMAND ${powershell} + -executionpolicy bypass -noprofile + -command "import-module '${CMAKE_BINARY_DIR}/vcpkg-binpkg/vcpkg-binpkg.psm1'; vcpkg-list" + OUTPUT_VARIABLE vcpkg_list_text + ) + else() + execute_process( + COMMAND ${vcpkg_exe} list + OUTPUT_VARIABLE vcpkg_list_text + ERROR_QUIET + ) + endif() + + string(REGEX REPLACE "\r?\n" ";" vcpkg_list_raw "${vcpkg_list_text}") + + set(VCPKG_INSTALLED_COUNT 0 PARENT_SCOPE) + foreach(pkg ${vcpkg_list_raw}) + if(NOT pkg MATCHES "^([^:[]+)[^:]*:([^ ]+) +([0-9][^ ]*) +.*\$") + continue() + endif() + set(inst_pkg_name ${CMAKE_MATCH_1}) + set(inst_pkg_ver ${CMAKE_MATCH_3}) + set(inst_pkg_triplet ${CMAKE_MATCH_2}) + + unset(CMAKE_MATCH_1) + string(REGEX REPLACE "#([0-9]+)\$" "" inst_pkg_ver ${inst_pkg_ver}) + if(CMAKE_MATCH_1) + set(inst_pkg_rev ${CMAKE_MATCH_1}) + else() + set(inst_pkg_rev FALSE) + endif() + + string(REPLACE "-" "." inst_pkg_ver ${inst_pkg_ver}) + + list(APPEND VCPKG_INSTALLED ${inst_pkg_name} ${inst_pkg_ver} ${inst_pkg_rev} ${inst_pkg_triplet}) + math(EXPR VCPKG_INSTALLED_COUNT "${VCPKG_INSTALLED_COUNT} + 1") + endforeach() + set(VCPKG_INSTALLED ${VCPKG_INSTALLED} PARENT_SCOPE) + set(VCPKG_INSTALLED_COUNT ${VCPKG_INSTALLED_COUNT} PARENT_SCOPE) + endif() + + if(NOT VCPKG_INSTALLED_COUNT GREATER 0) + return() + endif() + + math(EXPR idx_max "(${VCPKG_INSTALLED_COUNT} - 1) * 4") + + foreach(idx RANGE 0 ${idx_max} 4) + math(EXPR idx_ver "${idx} + 1") + math(EXPR idx_rev "${idx} + 2") + math(EXPR idx_triplet "${idx} + 3") + list(GET VCPKG_INSTALLED ${idx} inst_pkg_name) + list(GET VCPKG_INSTALLED ${idx_ver} inst_pkg_ver) + list(GET VCPKG_INSTALLED ${idx_rev} inst_pkg_rev) + list(GET VCPKG_INSTALLED ${idx_triplet} inst_pkg_triplet) + + if(NOT inst_pkg_triplet STREQUAL pkg_triplet) + continue() + endif() + + if(inst_pkg_name STREQUAL pkg_name + AND pkg_ver VERSION_LESS inst_pkg_ver + OR (pkg_ver VERSION_EQUAL inst_pkg_ver + AND ((NOT pkg_rev AND NOT inst_pkg_rev) + OR (pkg_rev AND inst_pkg_rev AND (NOT pkg_rev GREATER inst_pkg_rev))))) + + set(${outvar} TRUE PARENT_SCOPE) + return() + endif() + endforeach() +endfunction() + +function(get_binary_packages vcpkg_exe) + set(binary_packages_installed FALSE PARENT_SCOPE) + + unset(triplets) + unset(host_triplet) + # Determine host triplet for vcpkg build dependencies + if(WIN32) + if($ENV{PROCESSOR_ARCHITECTURE} MATCHES "[Aa][Rr][Mm]64") + set(host_triplet "arm64-windows") + elseif($ENV{PROCESSOR_ARCHITECTURE} MATCHES "[Aa][Mm][Dd]64|[Xx]64") + set(host_triplet "x64-windows") + else() + set(host_triplet "x86-windows") + endif() + endif() + if(DEFINED host_triplet) + list(APPEND triplets ${host_triplet}) + endif() + list(APPEND triplets ${VCPKG_TARGET_TRIPLET}) + + foreach(triplet ${triplets}) + file( + DOWNLOAD "https://nightly.vba-m.com/vcpkg/${triplet}/" "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html" + STATUS pkg_list_status + ) + list(GET pkg_list_status 1 pkg_list_error) + list(GET pkg_list_status 0 pkg_list_status) + + if(NOT pkg_list_status EQUAL 0) + message(STATUS "Failed to download vcpkg binary package list: ${pkg_list_status} - ${pkg_list_error}") + return() + endif() + endforeach() + + unset(binary_packages) + foreach(triplet ${triplets}) + file(READ "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html" raw_html) + string(REGEX MATCHALL " {}; stdenv.mkDerivation { name = "visualboyadvance-m"; - buildInputs = [ ninja cmake gcc nasm gettext pkg-config zip sfml zlib ffmpeg wxGTK31-gtk3 mesa glfw SDL2 gtk3-x11 pcre util-linuxMinimal libselinux libsepol libthai libdatrie xorg.libXdmcp xorg.libXtst libxkbcommon epoxy dbus at-spi2-core ]; -# WIP: Trying to get this to work on mac nix. -# buildInputs = [ ninja cmake gcc nasm gettext pkg-config zip sfml zlib ffmpeg wxmac SDL2 pcre ]; + buildInputs = if stdenv.isDarwin then + [ ninja cmake gcc nasm gettext pkg-config zip sfml zlib openal ffmpeg wxGTK32 SDL2 pcre pcre2 darwin.apple_sdk.frameworks.IOKit darwin.apple_sdk.frameworks.Carbon darwin.apple_sdk.frameworks.Cocoa darwin.apple_sdk.frameworks.QuartzCore darwin.apple_sdk.frameworks.AudioToolbox darwin.apple_sdk.frameworks.OpenGL darwin.apple_sdk.frameworks.OpenAL ] + else + [ ninja cmake gcc nasm gettext pkg-config zip sfml zlib openal ffmpeg wxGTK32 mesa glfw SDL2 gtk3-x11 pcre pcre2 util-linuxMinimal libselinux libsepol libthai libdatrie xorg.libXdmcp xorg.libXtst libxkbcommon epoxy dbus at-spi2-core ]; } diff --git a/installdeps b/installdeps index 708002e43..b19c1484f 100755 --- a/installdeps +++ b/installdeps @@ -179,6 +179,9 @@ linux_installdeps() { nixos) nixos_installdeps ;; + alpine) + alpine_installdeps + ;; *) error "Don't know how to install deps on your version of Linux" ;; @@ -335,16 +338,24 @@ debian_installdeps() { libswresample_dev=$(apt-cache search libswresample-dev | awk '{print $1}') fi - # in newer distros - wx_lib=$(apt-cache search 'libwxgtk3.0-gtk3(-[^[:space:]]+)?$' | grep -v -- -dev | sed 's/ - .*//') - wx_lib_dev=$(apt-cache search 'libwxgtk3.0-gtk3-dev(-[^[:space:]]+)?$' | sed 's/ - .*//') - - if [ -z "$wx_lib" ] || [ -z "$wx_lib_dev" ]; then - wx_lib=libwxgtk3.0 - wx_lib_dev=libwxgtk3.0-dev - fi + wx_libs=$(apt-cache search 'libwxgtk[0-9]' | sed 's/ - .*//') + + # Use -gtk3 variant on older distros. + case "$wx_libs" in + *-gtk3*) + new_wx_libs= + for pkg in $wx_libs; do + case "$pkg" in + *-gtk3*) + new_wx_libs="$new_wx_libs $pkg" + ;; + esac + done + wx_libs=$new_wx_libs + ;; + esac - pkgs="build-essential g++ nasm cmake ccache gettext zlib1g-dev libgl1-mesa-dev libgettextpo-dev libsdl2-dev $sdl_lib libglu1-mesa-dev libglu1-mesa libgles2-mesa-dev libsfml-dev $sfml_libs $glew_lib $wx_lib $wx_lib_dev libgtk2.0-dev libgtk-3-dev ccache zip ninja-build" + pkgs="build-essential g++ nasm cmake ccache gettext zlib1g-dev libgl1-mesa-dev libgettextpo-dev libsdl2-dev $sdl_lib libglu1-mesa-dev libglu1-mesa libgles2-mesa-dev libsfml-dev $sfml_libs $glew_lib $wx_libs libgtk2.0-dev libgtk-3-dev ccache zip ninja-build" [ -n "$ENABLE_OPENAL" ] && pkgs="$pkgs libopenal-dev" [ -n "$ENABLE_FFMPEG" ] && pkgs="$pkgs libavcodec-dev libavformat-dev libswscale-dev libavutil-dev $libswresample_dev" @@ -1097,6 +1108,15 @@ gentoo_installdeps() { build_instructions } +alpine_installdeps() { + installing + + check sudo apk add cmake ninja g++ ccache nasm gettext-dev zlib-dev mesa-dev sdl2-dev glu-dev sfml-dev wxwidgets-dev gtk+3.0-dev zip + + build_instructions +} + + windows_installdeps() { msys2=1 diff --git a/po/wxvbam/aa_DJ.po b/po/wxvbam/aa_DJ.po deleted file mode 100644 index ea334eea4..000000000 --- a/po/wxvbam/aa_DJ.po +++ /dev/null @@ -1,4323 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: VBA-M\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-05-23 14:26-0700\n" -"PO-Revision-Date: 2011-12-03 19:42+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Afar (Djibouti) (http://app.transifex.com/bgk/vba-m/language/aa_DJ/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: aa_DJ\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: wxvbam.cpp:309 -msgid "visualboyadvance-m" -msgstr "" - -#: wxvbam.cpp:380 wxvbam.cpp:397 -#, c-format -msgid "Invalid configuration file provided: %s" -msgstr "" - -#: wxvbam.cpp:536 -msgid "Could not create main window" -msgstr "" - -#: wxvbam.cpp:617 -msgid "Save built-in XRC file and exit" -msgstr "" - -#: wxvbam.cpp:620 -msgid "Save built-in vba-over.ini and exit" -msgstr "" - -#: wxvbam.cpp:623 -msgid "Print configuration path and exit" -msgstr "" - -#: wxvbam.cpp:626 -msgid "Start in full-screen mode" -msgstr "" - -#: wxvbam.cpp:629 -msgid "Set a configuration file" -msgstr "" - -#: wxvbam.cpp:633 -msgid "Delete shared link state first, if it exists" -msgstr "" - -#: wxvbam.cpp:640 -msgid "List all settable options and exit" -msgstr "" - -#: wxvbam.cpp:643 -msgid "ROM file" -msgstr "" - -#: wxvbam.cpp:645 -msgid "=" -msgstr "" - -#: wxvbam.cpp:676 -msgid "Configuration / build error: can't find built-in xrc" -msgstr "" - -#: wxvbam.cpp:684 -#, c-format -msgid "" -"Wrote built-in configuration to %s.\n" -"To override, remove all but changed root node(s). First found root node of correct name in any .xrc or .xrs files in following search path overrides built-in:" -msgstr "" - -#: wxvbam.cpp:698 -msgid "Configuration is read from, in order:" -msgstr "" - -#: wxvbam.cpp:712 -#, c-format -msgid "" -"Wrote built-in override file to %s\n" -"To override, delete all but changed section. First found section is used from search path:" -msgstr "" - -#: wxvbam.cpp:718 -msgid "" -"\n" -"\tbuilt-in" -msgstr "" - -#: wxvbam.cpp:733 -msgid "" -"Options set from the command line are saved if any configuration changes are made in the user interface.\n" -"\n" -"For flag options, true and false are specified as 1 and 0, respectively.\n" -"\n" -msgstr "" - -#: wxvbam.cpp:741 -msgid "" -"The commands available for the Keyboard/* option are:\n" -"\n" -msgstr "" - -#: wxvbam.cpp:752 -msgid "Configuration file not found." -msgstr "" - -#: wxvbam.cpp:783 -msgid "Bad configuration option or multiple ROM files given:\n" -msgstr "" - -#: guiinit.cpp:103 -msgid "Start!" -msgstr "" - -#: guiinit.cpp:122 xrc/NetLink.xrc:99 -msgid "Connect" -msgstr "" - -#: guiinit.cpp:139 -msgid "You must enter a valid host name" -msgstr "" - -#: guiinit.cpp:140 -msgid "Host name invalid" -msgstr "" - -#: guiinit.cpp:158 -msgid "Waiting for clients..." -msgstr "" - -#: guiinit.cpp:159 -#, c-format -msgid "Server IP address is: %s\n" -msgstr "" - -#: guiinit.cpp:161 -msgid "Waiting for connection..." -msgstr "" - -#: guiinit.cpp:162 -#, c-format -msgid "Connecting to %s\n" -msgstr "" - -#: guiinit.cpp:195 -msgid "" -"Error occurred.\n" -"Please try again." -msgstr "" - -#: guiinit.cpp:262 guiinit.cpp:315 -msgid "Select cheat file" -msgstr "" - -#: guiinit.cpp:263 -msgid "VBA cheat lists (*.clt)|*.clt|CHT cheat lists (*.cht)|*.cht" -msgstr "" - -#: guiinit.cpp:282 panel.cpp:517 -msgid "Loaded cheats" -msgstr "" - -#: guiinit.cpp:316 -msgid "VBA cheat lists (*.clt)|*.clt" -msgstr "" - -#: guiinit.cpp:334 -msgid "Saved cheats" -msgstr "" - -#: guiinit.cpp:365 guiinit.cpp:384 -msgid "Restore old values?" -msgstr "" - -#: guiinit.cpp:366 guiinit.cpp:385 -msgid "Removing cheats" -msgstr "" - -#: guiinit.cpp:776 dialogs/gb-rom-info.cpp:60 xrc/JoyPanel.xrc:364 -msgid "Game Shark" -msgstr "" - -#: guiinit.cpp:777 dialogs/gb-rom-info.cpp:57 -msgid "Game Genie" -msgstr "" - -#: guiinit.cpp:779 -msgid "Generic Code" -msgstr "" - -#: guiinit.cpp:780 -msgid "Game Shark Advance" -msgstr "" - -#: guiinit.cpp:781 -msgid "Code Breaker Advance" -msgstr "" - -#: guiinit.cpp:782 -msgid "Flashcart CHT" -msgstr "" - -#: guiinit.cpp:850 guiinit.cpp:1105 -msgid "Number cannot be empty" -msgstr "" - -#: guiinit.cpp:900 -msgid "Search produced no results" -msgstr "" - -#: guiinit.cpp:1063 -msgid "8-bit " -msgstr "" - -#: guiinit.cpp:1067 -msgid "16-bit " -msgstr "" - -#: guiinit.cpp:1071 -msgid "32-bit " -msgstr "" - -#: guiinit.cpp:1077 -msgid "signed decimal" -msgstr "" - -#: guiinit.cpp:1081 -msgid "unsigned decimal" -msgstr "" - -#: guiinit.cpp:1085 -msgid "unsigned hexadecimal" -msgstr "" - -#: guiinit.cpp:1486 -#, c-format -msgid "%d frames = %.2f ms" -msgstr "" - -#: guiinit.cpp:1498 -msgid "Default device" -msgstr "" - -#: guiinit.cpp:1951 -msgid "Main icon not found" -msgstr "" - -#: guiinit.cpp:1969 -msgid "Main display panel not found" -msgstr "" - -#: guiinit.cpp:2228 -#, c-format -msgid "Invalid menu item %s; removing" -msgstr "" - -#: guiinit.cpp:2413 -msgid "Code" -msgstr "" - -#: guiinit.cpp:2422 -msgid "Description" -msgstr "" - -#: guiinit.cpp:2496 xrc/CheatAdd.xrc:31 -msgid "Address" -msgstr "" - -#: guiinit.cpp:2497 -msgid "Old Value" -msgstr "" - -#: guiinit.cpp:2498 -msgid "New Value" -msgstr "" - -#: guiinit.cpp:2872 -msgid "JoyBus host invalid; disabling" -msgstr "" - -#: viewers.cpp:561 -msgid "Text files (*.txt;*.log)|*.txt;*.log|" -msgstr "" - -#: viewers.cpp:563 viewers.cpp:773 gfxviewers.cpp:1603 gfxviewers.cpp:1746 -#: cmdevents.cpp:670 cmdevents.cpp:748 cmdevents.cpp:818 cmdevents.cpp:889 -#: viewsupt.cpp:1183 -msgid "Select output file" -msgstr "" - -#: viewers.cpp:699 viewers.cpp:771 -msgid "Memory dumps (*.dmp;*.bin)|*.dmp;*.bin|" -msgstr "" - -#: viewers.cpp:701 -msgid "Select memory dump file" -msgstr "" - -#: viewers.cpp:815 -msgid "0x00000000 - BIOS" -msgstr "" - -#: viewers.cpp:816 -msgid "0x02000000 - WRAM" -msgstr "" - -#: viewers.cpp:817 -msgid "0x03000000 - IRAM" -msgstr "" - -#: viewers.cpp:818 -msgid "0x04000000 - I / O" -msgstr "" - -#: viewers.cpp:819 -msgid "0x05000000 - PALETTE" -msgstr "" - -#: viewers.cpp:820 -msgid "0x06000000 - VRAM" -msgstr "" - -#: viewers.cpp:821 -msgid "0x07000000 - OAM" -msgstr "" - -#: viewers.cpp:822 -msgid "0x08000000 - ROM" -msgstr "" - -#: viewers.cpp:925 -msgid "0x0000 - ROM" -msgstr "" - -#: viewers.cpp:926 -msgid "0x4000 - ROM" -msgstr "" - -#: viewers.cpp:927 -msgid "0x8000 - VRAM" -msgstr "" - -#: viewers.cpp:928 -msgid "0xA000 - SRAM" -msgstr "" - -#: viewers.cpp:929 -msgid "0xC000 - RAM" -msgstr "" - -#: viewers.cpp:930 -msgid "0xD000 - WRAM" -msgstr "" - -#: viewers.cpp:931 -msgid "0xFF00 - I / O" -msgstr "" - -#: viewers.cpp:932 -msgid "0xFF80 - RAM" -msgstr "" - -#: gfxviewers.cpp:1143 -msgid "Select output file and type" -msgstr "" - -#: gfxviewers.cpp:1144 -msgid "" -"Windows Palette (*.pal)|*.pal|PaintShop Palette (*.pal)|*.pal|Adobe Color " -"Table (*.act)|*.act" -msgstr "" - -#: gfxviewers.cpp:1604 gfxviewers.cpp:1747 cmdevents.cpp:671 viewsupt.cpp:1184 -msgid "PNG images|*.png|BMP images|*.bmp" -msgstr "" - -#: cmdevents.cpp:129 -msgid "" -"Game Boy Advance Files " -"(*.agb;*.gba;*.bin;*.elf;*.mb;*.zip;*.7z;*.rar)|*.agb;*.gba;*.bin;*.elf;*.mb;*.agb.gz;*.gba.gz;*.bin.gz;*.elf.gz;*.mb.gz;*.agb.z;*.gba.z;*.bin.z;*.elf.z;*.mb.z;*.zip;*.7z;*.rar|Game" -" Boy Files " -"(*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.zip;*.7z;*.rar)|*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.dmg.gz;*.gb.gz;*.gbc.gz;*.cgb.gz;*.sgb.gz;*.dmg.z;*.gb.z;*.gbc.z;*.cgb.z;*.sgb.z;*.zip;*.7z;*.rar|" -msgstr "" - -#: cmdevents.cpp:140 -msgid "Open ROM file" -msgstr "" - -#: cmdevents.cpp:161 -msgid "" -"Game Boy Files " -"(*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.zip;*.7z;*.rar)|*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.dmg.gz;*.gb.gz;*.gbc.gz;*.cgb.gz;*.sgb.gz;*.dmg.z;*.gb.z;*.gbc.z;*.cgb.z;*.sgb.z;*.zip;*.7z;*.rar|" -msgstr "" - -#: cmdevents.cpp:167 -msgid "Open GB ROM file" -msgstr "" - -#: cmdevents.cpp:188 -msgid "" -"Game Boy Color Files " -"(*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.zip;*.7z;*.rar)|*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.dmg.gz;*.gb.gz;*.gbc.gz;*.cgb.gz;*.sgb.gz;*.dmg.z;*.gb.z;*.gbc.z;*.cgb.z;*.sgb.z;*.zip;*.7z;*.rar|" -msgstr "" - -#: cmdevents.cpp:194 -msgid "Open GBC ROM file" -msgstr "" - -#: cmdevents.cpp:359 cmdevents.cpp:381 -msgid "Select Dot Code file" -msgstr "" - -#: cmdevents.cpp:361 cmdevents.cpp:383 -msgid "e-Reader Dot Code (*.bin;*.raw)|*.bin;*.raw" -msgstr "" - -#: cmdevents.cpp:402 cmdevents.cpp:597 -msgid "Select battery file" -msgstr "" - -#: cmdevents.cpp:403 cmdevents.cpp:598 -msgid "Battery file (*.sav)|*.sav|Flash save (*.dat)|*.dat" -msgstr "" - -#: cmdevents.cpp:411 -msgid "" -"Importing a battery file will erase any saved games (permanently after the " -"next write). Do you want to continue?" -msgstr "" - -#: cmdevents.cpp:412 cmdevents.cpp:440 cmdevents.cpp:560 -msgid "Confirm import" -msgstr "" - -#: cmdevents.cpp:418 panel.cpp:460 -#, c-format -msgid "Loaded battery %s" -msgstr "" - -#: cmdevents.cpp:420 -#, c-format -msgid "Error loading battery %s" -msgstr "" - -#: cmdevents.cpp:429 -msgid "Select code file" -msgstr "" - -#: cmdevents.cpp:430 -msgid "Game Shark Code File (*.spc;*.xpc)|*.spc;*.xpc" -msgstr "" - -#: cmdevents.cpp:430 -msgid "Game Shark Code File (*.gcf)|*.gcf" -msgstr "" - -#: cmdevents.cpp:439 -msgid "" -"Importing a code file will replace any loaded cheats. Do you want to " -"continue?" -msgstr "" - -#: cmdevents.cpp:456 -#, c-format -msgid "Cannot open file %s" -msgstr "" - -#: cmdevents.cpp:466 -#, c-format -msgid "Unsupported code file %s" -msgstr "" - -#: cmdevents.cpp:536 -#, c-format -msgid "Loaded code file %s" -msgstr "" - -#: cmdevents.cpp:538 -#, c-format -msgid "Error loading code file %s" -msgstr "" - -#: cmdevents.cpp:549 cmdevents.cpp:625 -msgid "Select snapshot file" -msgstr "" - -#: cmdevents.cpp:550 -msgid "" -"Game Shark & PAC Snapshots (*.sps;*.xps)|*.sps;*.xps|Game Shark SP Snapshots" -" (*.gsv)|*.gsv" -msgstr "" - -#: cmdevents.cpp:550 -msgid "Game Boy Snapshot (*.gbs)|*.gbs" -msgstr "" - -#: cmdevents.cpp:559 -msgid "" -"Importing a snapshot file will erase any saved games (permanently after the " -"next write). Do you want to continue?" -msgstr "" - -#: cmdevents.cpp:584 -#, c-format -msgid "Loaded snapshot file %s" -msgstr "" - -#: cmdevents.cpp:586 -#, c-format -msgid "Error loading snapshot file %s" -msgstr "" - -#: cmdevents.cpp:609 -#, c-format -msgid "Wrote battery %s" -msgstr "" - -#: cmdevents.cpp:611 panel.cpp:772 -#, c-format -msgid "Error writing battery %s" -msgstr "" - -#: cmdevents.cpp:619 -msgid "EEPROM saves cannot be exported" -msgstr "" - -#: cmdevents.cpp:626 -msgid "Game Shark Snapshot (*.sps)|*.sps" -msgstr "" - -#: cmdevents.cpp:640 -msgid "Exported from Visual Boy Advance-M" -msgstr "" - -#: cmdevents.cpp:652 -#, c-format -msgid "Saved snapshot file %s" -msgstr "" - -#: cmdevents.cpp:654 -#, c-format -msgid "Error saving snapshot file %s" -msgstr "" - -#: cmdevents.cpp:695 sys.cpp:574 -#, c-format -msgid "Wrote snapshot %s" -msgstr "" - -#: cmdevents.cpp:716 cmdevents.cpp:786 cmdevents.cpp:857 cmdevents.cpp:923 -msgid " files (" -msgstr "" - -#: cmdevents.cpp:956 -msgid "Select file" -msgstr "" - -#: cmdevents.cpp:1260 cmdevents.cpp:1353 -msgid "Select state file" -msgstr "" - -#: cmdevents.cpp:1261 cmdevents.cpp:1354 -msgid "Visual Boy Advance saved game files|*.sgm" -msgstr "" - -#: cmdevents.cpp:1384 cmdevents.cpp:1394 cmdevents.cpp:1405 -#, c-format -msgid "Current state slot #%d" -msgstr "" - -#: cmdevents.cpp:1470 -msgid "Cannot use Colorizer Hack when Game Boy BIOS File is enabled." -msgstr "" - -#: cmdevents.cpp:1681 -msgid "Sound enabled" -msgstr "" - -#: cmdevents.cpp:1681 -msgid "Sound disabled" -msgstr "" - -#: cmdevents.cpp:1694 cmdevents.cpp:1708 -#, c-format -msgid "Volume: %d %%" -msgstr "" - -#: cmdevents.cpp:1777 -msgid "Set to 0 for pseudo tty" -msgstr "" - -#: cmdevents.cpp:1779 -msgid "Port to wait for connection:" -msgstr "" - -#: cmdevents.cpp:1780 -msgid "GDB Connection" -msgstr "" - -#: cmdevents.cpp:1832 -#, c-format -msgid "Waiting for connection at %s" -msgstr "" - -#: cmdevents.cpp:1839 -#, c-format -msgid "Waiting for connection on port %d" -msgstr "" - -#: cmdevents.cpp:1842 -msgid "Waiting for GDB..." -msgstr "" - -#: cmdevents.cpp:2215 panel.cpp:260 panel.cpp:372 -msgid "Could not initialize the sound driver!" -msgstr "" - -#: cmdevents.cpp:2280 -msgid "" -"YOUR CONFIGURATION WILL BE DELETED!\n" -"\n" -"Are you sure?" -msgstr "" - -#: cmdevents.cpp:2281 -msgid "FACTORY RESET" -msgstr "" - -#: cmdevents.cpp:2316 -msgid "Nintendo Game Boy / Color / Advance emulator." -msgstr "" - -#: cmdevents.cpp:2317 -msgid "" -"Copyright (C) 1999-2003 Forgotten\n" -"Copyright (C) 2004-2006 VBA development team\n" -"Copyright (C) 2007-2020 VBA-M development team" -msgstr "" - -#: cmdevents.cpp:2319 -msgid "" -"This program is free software: you can redistribute it and / or modify\n" -"it under the terms of the GNU General Public License as published by\n" -"the Free Software Foundation, either version 2 of the License, or\n" -"(at your option) any later version.\n" -"\n" -"This program is distributed in the hope that it will be useful,\n" -"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" -"GNU General Public License for more details.\n" -"\n" -"You should have received a copy of the GNU General Public License\n" -"along with this program. If not, see http://www.gnu.org/licenses ." -msgstr "" - -#: cmdevents.cpp:2504 -msgid "Cannot use Game Boy BIOS when Colorizer Hack is enabled." -msgstr "" - -#: cmdevents.cpp:2558 -msgid "LAN link is already active. Disable link mode to disconnect." -msgstr "" - -#: cmdevents.cpp:2564 -msgid "Network is not supported in local mode." -msgstr "" - -#: extra-translations.cpp:12 -msgid "&Apply" -msgstr "" - -#: extra-translations.cpp:13 -msgid "Artists" -msgstr "" - -#: extra-translations.cpp:14 -msgid "Cancel" -msgstr "" - -#: extra-translations.cpp:15 -msgid "Close" -msgstr "" - -#: extra-translations.cpp:16 -msgid "Developers" -msgstr "" - -#: extra-translations.cpp:17 -msgid "License" -msgstr "" - -#: extra-translations.cpp:18 -msgid "OK" -msgstr "" - -#: opts.cpp:290 -msgid "" -"The INI file was written for a more recent version of VBA-M. Some INI option" -" values may have been reset." -msgstr "" - -#: opts.cpp:457 opts.cpp:477 opts.cpp:662 -#, c-format -msgid "Invalid key binding %s for %s" -msgstr "" - -#: opts.cpp:598 opts.cpp:607 opts.cpp:616 opts.cpp:625 config/option.cpp:492 -#, c-format -msgid "Invalid value %s for option %s" -msgstr "" - -#: opts.cpp:684 -#, c-format -msgid "Unknown option %s with value %s" -msgstr "" - -#: sys.cpp:200 sys.cpp:261 -msgid "No game in progress to record" -msgstr "" - -#: sys.cpp:218 -#, c-format -msgid "Cannot open output file %s" -msgstr "" - -#: sys.cpp:225 sys.cpp:245 sys.cpp:395 -msgid "Error writing game recording" -msgstr "" - -#: sys.cpp:266 -msgid "Cannot play game recording while recording" -msgstr "" - -#: sys.cpp:281 -#, c-format -msgid "Cannot open recording file %s" -msgstr "" - -#: sys.cpp:290 sys.cpp:300 -msgid "Error reading game recording" -msgstr "" - -#: sys.cpp:410 sys.cpp:429 -msgid "Playback ended" -msgstr "" - -#: sys.cpp:453 -#, c-format -msgid "%d %% (%d, %d fps)" -msgstr "" - -#: sys.cpp:461 -#, c-format -msgid "%d %%" -msgstr "" - -#: sys.cpp:895 xrc/GBPrinter.xrc:65 -msgid "&Discard" -msgstr "" - -#: sys.cpp:929 -msgid "Image files (*.bmp;*.jpg;*.png)|*.bmp;*.jpg;*.png|" -msgstr "" - -#: sys.cpp:938 -msgid "Save printer image to" -msgstr "" - -#: sys.cpp:952 sys.cpp:1136 -#, c-format -msgid "Wrote printer output to %s" -msgstr "" - -#: sys.cpp:957 sys.cpp:1028 -msgid "&Close" -msgstr "" - -#: sys.cpp:1023 -msgid "Printed" -msgstr "" - -#: sys.cpp:1326 -#, c-format -msgid "Error opening pseudo tty: %s" -msgstr "" - -#: sys.cpp:1425 -#, c-format -msgid "Error setting up server socket (%d)" -msgstr "" - -#: panel.cpp:183 -#, c-format -msgid "%s is not a valid ROM file" -msgstr "" - -#: panel.cpp:184 panel.cpp:245 panel.cpp:310 -msgid "Problem loading file" -msgstr "" - -#: panel.cpp:244 -#, c-format -msgid "Unable to load Game Boy ROM %s" -msgstr "" - -#: panel.cpp:272 -msgid "" -"Cannot use Game Boy BIOS file when Colorizer Hack is enabled, disabling Game" -" Boy BIOS file." -msgstr "" - -#: panel.cpp:286 panel.cpp:386 -#, c-format -msgid "Could not load BIOS %s" -msgstr "" - -#: panel.cpp:309 -#, c-format -msgid "Unable to load Game Boy Advance ROM %s" -msgstr "" - -#: panel.cpp:554 -msgid " player " -msgstr "" - -#: panel.cpp:720 -#, c-format -msgid "Loaded state %s" -msgstr "" - -#: panel.cpp:720 -#, c-format -msgid "Error loading state %s" -msgstr "" - -#: panel.cpp:744 -#, c-format -msgid "Saved state %s" -msgstr "" - -#: panel.cpp:744 -#, c-format -msgid "Error saving state %s" -msgstr "" - -#: panel.cpp:948 -#, c-format -msgid "Fullscreen mode %d x %d - %d @ %d not supported; looking for another" -msgstr "" - -#: panel.cpp:986 -#, c-format -msgid "Fullscreen mode %d x %d - %d @ %d not supported" -msgstr "" - -#: panel.cpp:991 -#, c-format -msgid "Valid mode: %d x %d - %d @ %d" -msgstr "" - -#: panel.cpp:999 -#, c-format -msgid "Chose mode %d x %d - %d @ %d" -msgstr "" - -#: panel.cpp:1003 -#, c-format -msgid "Failed to change mode to %d x %d - %d @ %d" -msgstr "" - -#: panel.cpp:1094 -msgid "Not a valid Game Boy Advance cartridge" -msgstr "" - -#: panel.cpp:1257 -msgid "No memory for rewinding" -msgstr "" - -#: panel.cpp:1267 -msgid "Error writing rewind state" -msgstr "" - -#: panel.cpp:2285 -msgid "Enabling EGL VSync." -msgstr "" - -#: panel.cpp:2287 -msgid "Disabling EGL VSync." -msgstr "" - -#: panel.cpp:2294 -msgid "Enabling GLX VSync." -msgstr "" - -#: panel.cpp:2296 -msgid "Disabling GLX VSync." -msgstr "" - -#: panel.cpp:2314 -msgid "Failed to set glXSwapIntervalEXT" -msgstr "" - -#: panel.cpp:2323 -msgid "Failed to set glXSwapIntervalSGI" -msgstr "" - -#: panel.cpp:2332 -msgid "Failed to set glXSwapIntervalMESA" -msgstr "" - -#: panel.cpp:2339 -msgid "No support for wglGetExtensionsStringEXT" -msgstr "" - -#: panel.cpp:2342 -msgid "No support for WGL_EXT_swap_control" -msgstr "" - -#: panel.cpp:2351 -msgid "Failed to set wglSwapIntervalEXT" -msgstr "" - -#: panel.cpp:2357 -msgid "No VSYNC available on this platform" -msgstr "" - -#: panel.cpp:2457 -msgid "memory allocation error" -msgstr "" - -#: panel.cpp:2460 -msgid "error initializing codec" -msgstr "" - -#: panel.cpp:2463 -msgid "error writing to output file" -msgstr "" - -#: panel.cpp:2466 -msgid "can't guess output format from file name" -msgstr "" - -#: panel.cpp:2471 -msgid "programming error; aborting!" -msgstr "" - -#: panel.cpp:2483 panel.cpp:2512 -#, c-format -msgid "Unable to begin recording to %s (%s)" -msgstr "" - -#: panel.cpp:2540 -#, c-format -msgid "Error in audio / video recording (%s); aborting" -msgstr "" - -#: panel.cpp:2546 -#, c-format -msgid "Error in audio recording (%s); aborting" -msgstr "" - -#: panel.cpp:2556 -#, c-format -msgid "Error in video recording (%s); aborting" -msgstr "" - -#: viewsupt.cpp:778 -msgid "R:" -msgstr "" - -#: viewsupt.cpp:787 -msgid "G:" -msgstr "" - -#: viewsupt.cpp:796 -msgid "B:" -msgstr "" - -#: config/internal/option-internal.cpp:376 -msgid "Use bilinear filter with 3d renderer" -msgstr "" - -#: config/internal/option-internal.cpp:377 -msgid "Full-screen filter to apply" -msgstr "" - -#: config/internal/option-internal.cpp:378 -msgid "Filter plugin library" -msgstr "" - -#: config/internal/option-internal.cpp:379 -msgid "Interframe blending function" -msgstr "" - -#: config/internal/option-internal.cpp:380 -msgid "Keep window on top" -msgstr "" - -#: config/internal/option-internal.cpp:382 -msgid "Maximum number of threads to run filters in" -msgstr "" - -#: config/internal/option-internal.cpp:384 -msgid "Render method; if unsupported, simple method will be used" -msgstr "" - -#: config/internal/option-internal.cpp:385 -msgid "Default scale factor" -msgstr "" - -#: config/internal/option-internal.cpp:387 -msgid "Retain aspect ratio when resizing" -msgstr "" - -#: config/internal/option-internal.cpp:391 -msgid "BIOS file to use for Game Boy, if enabled" -msgstr "" - -#: config/internal/option-internal.cpp:393 -msgid "Game Boy color enhancement, if enabled" -msgstr "" - -#: config/internal/option-internal.cpp:395 -msgid "Enable DX Colorization Hacks" -msgstr "" - -#: config/internal/option-internal.cpp:397 -#: config/internal/option-internal.cpp:423 -msgid "Apply LCD filter, if enabled" -msgstr "" - -#: config/internal/option-internal.cpp:399 -msgid "BIOS file to use for Game Boy Color, if enabled" -msgstr "" - -#: config/internal/option-internal.cpp:401 -msgid "" -"The default palette, as 8 comma-separated 4-digit hex integers (rgb555)." -msgstr "" - -#: config/internal/option-internal.cpp:404 -msgid "" -"The first user palette, as 8 comma-separated 4-digit hex integers (rgb555)." -msgstr "" - -#: config/internal/option-internal.cpp:407 -msgid "" -"The second user palette, as 8 comma-separated 4-digit hex integers (rgb555)." -msgstr "" - -#: config/internal/option-internal.cpp:410 -msgid "Automatically gather a full page before printing" -msgstr "" - -#: config/internal/option-internal.cpp:412 -msgid "Automatically save printouts as screen captures with -print suffix" -msgstr "" - -#: config/internal/option-internal.cpp:414 -#: config/internal/option-internal.cpp:444 -msgid "Directory to look for ROM files" -msgstr "" - -#: config/internal/option-internal.cpp:416 -msgid "Directory to look for Game Boy Color ROM files" -msgstr "" - -#: config/internal/option-internal.cpp:419 -msgid "BIOS file to use, if enabled" -msgstr "" - -#: config/internal/option-internal.cpp:429 -msgid "Enable link at boot" -msgstr "" - -#: config/internal/option-internal.cpp:434 -msgid "Enable faster network protocol by default" -msgstr "" - -#: config/internal/option-internal.cpp:436 -msgid "Default network link client host" -msgstr "" - -#: config/internal/option-internal.cpp:437 -msgid "Default network link server IP to bind" -msgstr "" - -#: config/internal/option-internal.cpp:439 -msgid "Default network link port (server and client)" -msgstr "" - -#: config/internal/option-internal.cpp:440 -msgid "Default network protocol" -msgstr "" - -#: config/internal/option-internal.cpp:441 -msgid "Link timeout (ms)" -msgstr "" - -#: config/internal/option-internal.cpp:442 -msgid "Link cable type" -msgstr "" - -#: config/internal/option-internal.cpp:448 -msgid "Automatically load last saved state" -msgstr "" - -#: config/internal/option-internal.cpp:450 -msgid "" -"Directory to store game save files (relative paths are relative to ROM; " -"blank is config dir)" -msgstr "" - -#: config/internal/option-internal.cpp:452 -msgid "Freeze recent load list" -msgstr "" - -#: config/internal/option-internal.cpp:454 -msgid "" -"Directory to store A / V and game recordings (relative paths are relative to" -" ROM)" -msgstr "" - -#: config/internal/option-internal.cpp:457 -msgid "Number of seconds between rewind snapshots (0 to disable)" -msgstr "" - -#: config/internal/option-internal.cpp:459 -msgid "Directory to store screenshots (relative paths are relative to ROM)" -msgstr "" - -#: config/internal/option-internal.cpp:462 -msgid "" -"Directory to store saved state files (relative paths are relative to " -"BatteryDir)" -msgstr "" - -#: config/internal/option-internal.cpp:464 -msgid "Enable status bar" -msgstr "" - -#: config/internal/option-internal.cpp:465 -msgid "INI file version (DO NOT MODIFY)" -msgstr "" - -#: config/internal/option-internal.cpp:469 -msgid "" -"The parameter Joypad//