diff --git a/3rdparty/libspectrum b/3rdparty/libspectrum index 282b61099..ad4416f5a 160000 --- a/3rdparty/libspectrum +++ b/3rdparty/libspectrum @@ -1 +1 @@ -Subproject commit 282b61099a2b7e171b0a13fc39821adb452e08ab +Subproject commit ad4416f5a158153e39d787d1d14c91400fa73889 diff --git a/Makefile b/Makefile index f14fee4bd..15ea09afd 100644 --- a/Makefile +++ b/Makefile @@ -1,304 +1,5179 @@ -.PHONY: 3rdparty audiofile libgcrypt FuseGenerator FuseImporter mbedtls libssh2 clean-3rdparty list-teams fusex archive dist dmg appcast appcast-push release release-clean release-notarize release-export clean - -# Signing parameters (can be overridden from command line) -# By default, use the signing settings already stored in the Xcode projects. -# Example override: make 3rdparty DEVELOPMENT_TEAM="ABC123DEFG" CODE_SIGN_IDENTITY="Apple Development" -DEVELOPMENT_TEAM ?= -CODE_SIGN_IDENTITY ?= -CODE_SIGN_STYLE ?= -PROVISIONING_PROFILE_SPECIFIER ?= - -# Archive path (can be overridden from command line) -# Example: make archive ARCHIVE_PATH=./build/FuseX.xcarchive -ARCHIVE_PATH ?= ./build/FuseX.xcarchive - -# Release paths and notarization profile -DIST_APP_PATH ?= dist/FuseX.app -ARCHIVE_APP_PATH = $(ARCHIVE_PATH)/Products/Applications/FuseX.app -RELEASE_ZIP_PATH ?= ./build/FuseX-notarize.zip -NOTARYTOOL_PROFILE ?= -FUSEX_VERSION ?= $(shell awk -F'= ' '/MARKETING_VERSION = / { gsub(/[";]/, "", $$2); print $$2; exit }' fusepb/FuseX.xcodeproj/project.pbxproj) -DMG_NAME ?= FuseX-$(FUSEX_VERSION).dmg -APPCAST_DIR ?= ./build/appcast -APPCAST_ARCHIVE ?= ./$(DMG_NAME) -APPCAST_OUTPUT ?= appcast.xml -APPCAST_URL_PREFIX ?= https://github.com/speccytools/fusex/releases/download/$(FUSEX_VERSION)/ -APPCAST_PUSH_DIR ?= ../speccytools.github.io -SPARKLE_GENERATE_APPCAST ?= $(shell find "$(HOME)/Library/Developer/Xcode/DerivedData" -path "*/SourcePackages/artifacts/sparkle/Sparkle/bin/generate_appcast" -type f 2>/dev/null | head -1) -FUSEGENERATOR_DEVELOPMENT_TEAM ?= $(if $(DEVELOPMENT_TEAM),$(DEVELOPMENT_TEAM),48UV5KV3FB) -FUSEGENERATOR_CODE_SIGN_IDENTITY ?= $(if $(CODE_SIGN_IDENTITY),$(CODE_SIGN_IDENTITY),Developer ID Application) -FUSEGENERATOR_CODE_SIGN_STYLE ?= $(if $(CODE_SIGN_STYLE),$(CODE_SIGN_STYLE),Manual) - -# Automatically set CODE_SIGN_STYLE=Manual if a code signing identity is specified -ifneq ($(CODE_SIGN_IDENTITY),) - CODE_SIGN_STYLE := Manual -endif - -# Build common xcodebuild arguments for signing -XCODEBUILD_SIGN_ARGS := -ifneq ($(DEVELOPMENT_TEAM),) - XCODEBUILD_SIGN_ARGS += DEVELOPMENT_TEAM="$(DEVELOPMENT_TEAM)" -endif -ifneq ($(CODE_SIGN_IDENTITY),) - XCODEBUILD_SIGN_ARGS += CODE_SIGN_IDENTITY="$(CODE_SIGN_IDENTITY)" - XCODEBUILD_SIGN_ARGS += CODE_SIGN_IDENTITY_ALL="$(CODE_SIGN_IDENTITY)" -endif -ifneq ($(CODE_SIGN_STYLE),) - XCODEBUILD_SIGN_ARGS += CODE_SIGN_STYLE="$(CODE_SIGN_STYLE)" -endif -ifneq ($(PROVISIONING_PROFILE_SPECIFIER),) - XCODEBUILD_SIGN_ARGS += PROVISIONING_PROFILE_SPECIFIER="$(PROVISIONING_PROFILE_SPECIFIER)" -endif - -all: 3rdparty - -fusepb: - cd fusepb && make clean && make - -3rdparty: audiofile libgcrypt FuseGenerator FuseImporter mbedtls libssh2 - -audiofile: - @echo "Building audiofile Framework..." - cd 3rdparty/audiofile && \ - xcodebuild -project audiofile.xcodeproj \ - -target "audiofile Framework" \ - -configuration Deployment \ - SYMROOT=build \ - BUILD_DIR=build \ - CONFIGURATION_BUILD_DIR=build/Deployment \ - $(XCODEBUILD_SIGN_ARGS) - -libgcrypt: - @echo "Building gcrypt Framework..." - cd 3rdparty/libgcrypt && \ - xcodebuild -project libgcrypt.xcodeproj \ - -target "gcrypt Framework" \ - -configuration Deployment \ - SYMROOT=build \ - BUILD_DIR=build \ - CONFIGURATION_BUILD_DIR=build/Deployment \ - $(XCODEBUILD_SIGN_ARGS) - -FuseGenerator: - @echo "Building Quick Look extensions..." - cd 3rdparty/FuseGenerator && \ - xcodebuild -project FuseGenerator.xcodeproj \ - -target "FuseQLThumbnail" \ - -target "FuseQLPreview" \ - -parallelizeTargets \ - -configuration Deployment \ - SYMROOT=build \ - BUILD_DIR=build \ - CONFIGURATION_BUILD_DIR=build/Deployment \ - DEVELOPMENT_TEAM="$(FUSEGENERATOR_DEVELOPMENT_TEAM)" \ - CODE_SIGN_IDENTITY="$(FUSEGENERATOR_CODE_SIGN_IDENTITY)" \ - CODE_SIGN_STYLE="$(FUSEGENERATOR_CODE_SIGN_STYLE)" \ - $(XCODEBUILD_SIGN_ARGS) - -FuseImporter: - @echo "Building FuseImporter Framework..." - cd 3rdparty/FuseImporter && \ - xcodebuild -project FuseImporter.xcodeproj \ - -target "FuseImporter" \ - -configuration Deployment \ - SYMROOT=build \ - BUILD_DIR=build \ - CONFIGURATION_BUILD_DIR=build/Deployment \ - $(XCODEBUILD_SIGN_ARGS) - -mbedtls: - @echo "Building mbedtls Framework..." - cd 3rdparty/mbedtls && \ - xcodebuild -project mbedtls.xcodeproj \ - -target "mbedtls" \ - -configuration Deployment \ - SYMROOT=build \ - BUILD_DIR=build \ - CONFIGURATION_BUILD_DIR=build/Deployment \ - $(XCODEBUILD_SIGN_ARGS) - -libssh2: mbedtls - @echo "Building libssh2 Framework..." - cd 3rdparty/libssh2 && \ - xcodebuild -project libssh2.xcodeproj \ - -target "libssh2" \ - -configuration Deployment \ - SYMROOT=build \ - BUILD_DIR=build \ - CONFIGURATION_BUILD_DIR=build/Deployment \ - $(XCODEBUILD_SIGN_ARGS) - -list-teams: - @echo "Available code signing identities and development teams:" - @echo "" - @if security find-identity -v -p codesigning 2>/dev/null | grep -q "valid identities found"; then \ - echo "Unique Development Team IDs:"; \ - security find-identity -v -p codesigning 2>/dev/null | \ - grep -oE '\([A-Z0-9]{10}\)' | \ - sed 's/[()]//g' | \ - sort -u | \ - while read team; do \ - echo " $$team"; \ - done; \ - echo ""; \ - echo "Full identity list:"; \ - security find-identity -v -p codesigning 2>/dev/null; \ - else \ - echo "No code signing identities found. Make sure you have certificates installed in your keychain."; \ - fi +# Makefile.in generated by automake 1.16.5 from Makefile.am. +# Makefile. Generated from Makefile.in by configure. -fusex: 3rdparty fusepb - @echo "Building FuseX app..." - cd fusepb && \ - xcodebuild -project FuseX.xcodeproj \ - -target FuseX \ - -configuration Deployment \ - SYMROOT=build \ - BUILD_DIR=build \ - CONFIGURATION_BUILD_DIR=build/Deployment \ - $(XCODEBUILD_SIGN_ARGS) - -release-clean: - @echo "Cleaning FuseX build folder..." - @rm -rf fusepb/build - @rm -rf build - @echo "Removing existing app bundle from dist/..." - @rm -rf "$(DIST_APP_PATH)" - -archive: 3rdparty fusepb - @echo "Archiving FuseX app..." - @mkdir -p build - cd fusepb && \ - xcodebuild archive \ - -project FuseX.xcodeproj \ - -scheme FuseX \ - -configuration Deployment \ - -archivePath "$(CURDIR)/$(ARCHIVE_PATH)" \ - SYMROOT=build \ - BUILD_DIR=build \ - CONFIGURATION_BUILD_DIR=build/Deployment \ - $(XCODEBUILD_SIGN_ARGS) - @echo "Archive created at: $(ARCHIVE_PATH)" - -release-notarize: archive - @echo "Submitting archived app for notarization..." - @if [ -z "$(NOTARYTOOL_PROFILE)" ]; then \ - echo "Error: NOTARYTOOL_PROFILE is required for make release"; \ - echo "Create one with: xcrun notarytool store-credentials --apple-id ... --team-id ... --password ..."; \ - exit 1; \ - fi - @if [ ! -d "$(ARCHIVE_APP_PATH)" ]; then \ - echo "Error: archived app not found at $(ARCHIVE_APP_PATH)"; \ - exit 1; \ - fi - @mkdir -p build - @rm -f "$(RELEASE_ZIP_PATH)" - @ditto -c -k --keepParent "$(ARCHIVE_APP_PATH)" "$(RELEASE_ZIP_PATH)" - @xcrun notarytool submit "$(RELEASE_ZIP_PATH)" --keychain-profile "$(NOTARYTOOL_PROFILE)" --wait - @xcrun stapler staple "$(ARCHIVE_APP_PATH)" - -release-export: release-notarize - @echo "Exporting notarized app to dist/..." - @mkdir -p dist - @rm -rf "$(DIST_APP_PATH)" - @ditto "$(ARCHIVE_APP_PATH)" "$(DIST_APP_PATH)" - -release: release-clean release-export - @$(MAKE) dmg - -dist: - @echo "Checking for dist/FuseX.app..." - @if [ ! -d "dist/FuseX.app" ]; then \ - echo "Error: dist/FuseX.app not found. Please copy FuseX.app to dist/ first."; \ - exit 1; \ - fi - @echo "dist/FuseX.app found." +# Copyright (C) 1994-2021 Free Software Foundation, Inc. -dmg: dist - @echo "Creating $(DMG_NAME)..." - @if ! command -v create-dmg >/dev/null 2>&1; then \ - echo "Error: create-dmg is not installed. Install it with: brew install create-dmg"; \ - exit 1; \ - fi - @rm -f "$(DMG_NAME)" - @if create-dmg \ - --volname "FuseX" \ - --window-pos 200 120 \ - --window-size 600 300 \ - --icon-size 100 \ - --icon "FuseX.app" 175 120 \ - --hide-extension "FuseX.app" \ - --app-drop-link 425 120 \ - "$(DMG_NAME)" \ - dist/; then \ - if [ -f "$(DMG_NAME)" ]; then \ - echo "DMG created successfully: $(DMG_NAME)"; \ - else \ - echo "Error: DMG file was not created"; \ - exit 1; \ - fi \ - else \ - echo "Error: create-dmg failed"; \ - exit 1; \ - fi +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. -appcast: - @echo "Generating Sparkle appcast..." - @if [ -z "$(SPARKLE_GENERATE_APPCAST)" ] || [ ! -x "$(SPARKLE_GENERATE_APPCAST)" ]; then \ - echo "Error: Sparkle generate_appcast tool not found."; \ - echo "Build/resolve Sparkle first, or pass SPARKLE_GENERATE_APPCAST=/path/to/generate_appcast"; \ - exit 1; \ - fi - @if [ ! -f "$(APPCAST_ARCHIVE)" ]; then \ - echo "Error: update archive not found: $(APPCAST_ARCHIVE)"; \ - echo "Create it first with: make dmg"; \ - exit 1; \ - fi - @url_prefix="$(APPCAST_URL_PREFIX)"; \ - if [ -z "$$url_prefix" ]; then \ - echo "Error: APPCAST_URL_PREFIX is required"; \ - exit 1; \ +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/fusex +pkgincludedir = $(includedir)/fusex +pkglibdir = $(libdir)/fusex +pkglibexecdir = $(libexecdir)/fusex +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = aarch64-apple-darwin25.5.0 +host_triplet = aarch64-apple-darwin25.5.0 +bin_PROGRAMS = fuse$(EXEEXT) +noinst_PROGRAMS = unittests/displaytest$(EXEEXT) \ + unittests/sdl2displaytest$(EXEEXT) \ + unittests/sdl2scalerstatetest$(EXEEXT) \ + unittests/sdl2joysticktest$(EXEEXT) \ + unittests/sdl2mousetest$(EXEEXT) \ + unittests/palcompositetest$(EXEEXT) \ + unittests/scalerexpandtest$(EXEEXT) z80/coretest$(EXEEXT) +#am__append_1 = $(LIBSSH2_LIBS) $(MBEDTLS_LIBS) +#am__append_2 = $(SDL1_LIBS) +am__append_3 = $(SDL2_LIBS) +#am__append_4 = $(SDL1_CFLAGS) +am__append_5 = $(SDL2_CFLAGS) +#am__append_6 = $(MBEDTLS_CFLAGS) $(LIBSSH2_CFLAGS) +#am__append_7 = windres.rc +#am__append_8 = -lcomctl32 -lwinmm -lshell32 $(WINSPARKLE_LIBS) windres.o +#am__append_9 = windres.o +#am__append_10 = $(WINSPARKLE_CFLAGS) +#am__append_11 = compat/dirname.c +#am__append_12 = compat/getopt.c compat/getopt1.c +#am__append_13 = \ +# compat/unix/dir.c \ +# compat/unix/file.c \ +# compat/amiga/osname.c \ +# compat/amiga/paths.c \ +# compat/unix/timer.c + +#am__append_14 = \ +# compat/unix/dir.c \ +# compat/unix/file.c \ +# compat/unix/osname.c \ +# compat/linux/relative_paths.c \ +# compat/unix/paths.c \ +# compat/unix/timer.c + +#am__append_15 = compat/unix/socket.c +#am__append_16 = \ +# compat/unix/dir.c \ +# compat/unix/file.c \ +# compat/morphos/osname.c \ +# compat/amiga/paths.c \ +# compat/unix/timer.c + +am__append_17 = \ + compat/unix/dir.c \ + compat/unix/file.c \ + compat/unix/osname.c \ + compat/unix/relative_paths.c \ + compat/unix/paths.c \ + compat/unix/timer.c + +am__append_18 = compat/unix/socket.c +#am__append_19 = \ +# compat/unix/dir.c \ +# compat/unix/file.c \ +# compat/wii/osname.c \ +# compat/wii/paths.c \ +# compat/wii/timer.c + +#am__append_20 = \ +# compat/unix/dir.c \ +# compat/unix/file.c \ +# compat/win32/osname.c \ +# compat/win32/paths.c \ +# compat/win32/timer.c + +#am__append_21 = compat/win32/socket.c +#am__append_22 = compat/unix/tuntap.c +#am__append_23 = \ +# debugger/vfile.c \ +# debugger/vfile_ext.c + +#am__append_24 = peripherals/nic/enc28j60.c +#am__append_25 = \ +# peripherals/flash/am29f010.c \ +# peripherals/nic/w5100.c \ +# peripherals/nic/w5100_socket.c \ +# peripherals/nic/dns_resolver.c \ +# peripherals/nic/dns_processor.c \ +# peripherals/nic/engines/engine_argv.c \ +# peripherals/nic/engines/engine_fs.c \ +# peripherals/nic/engines/engine_utf8.c \ +# peripherals/nic/engines/json.c \ +# peripherals/nic/engines/xpath.c \ +# peripherals/nic/engines/jsonpath/ast.c \ +# peripherals/nic/engines/jsonpath/lexer.c \ +# peripherals/nic/engines/jsonpath/matcher.c \ +# peripherals/nic/engines/jsonpath/parser.c \ +# peripherals/nic/engines/parson.c \ +# peripherals/nic/spectranext_controller.c \ +# peripherals/nic/spectranext_stdout.c \ +# peripherals/fs/xfs.c \ +# peripherals/fs/xfs_compat.c \ +# peripherals/fs/xfs_worker.c \ +# peripherals/fs/xfs_fs.c \ +# peripherals/fs/xfs_overlay.c \ +# peripherals/fs/xfs_romfs.c \ +# peripherals/fs/ramfs.c \ +# peripherals/fs/xfs_https.c \ +# peripherals/fs/xfs_https_compat.c \ +# peripherals/http/httpc.c \ +# peripherals/http/http_sck.c \ +# peripherals/security/tls.c \ +# peripherals/security/ssh.c + +#am__append_26 = $(ui_fb_files) +#am__append_27 = $(ui_fb_built) +#am__append_28 = $(ui_gtk_files) +#am__append_29 = $(ui_gtk_built) +am__append_30 = $(ui_null_files) +am__append_31 = $(ui_null_built) +#am__append_32 = $(ui_sdl_files) +#am__append_33 = $(ui_sdl_built) +#am__append_34 = $(ui_sdl2_files) +#am__append_35 = $(ui_widget_files) +#am__append_36 = $(ui_widget_built) +#am__append_37 = ui/widget/fuse.font +#am__append_38 = $(ui_wii_files) +#am__append_39 = $(ui_wii_built) +#am__append_40 = $(ui_win32_files) +#am__append_41 = $(ui_win32_built) +#am__append_42 = $(ui_xlib_files) +#am__append_43 = $(ui_xlib_built) +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ + $(top_srcdir)/m4/ax_string_strcasecmp.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \ + $(top_srcdir)/m4/sdl.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__dist_bashcompletion_DATA_DIST) \ + $(am__dist_icons128_DATA_DIST) $(am__dist_icons16_DATA_DIST) \ + $(am__dist_icons256_DATA_DIST) $(am__dist_icons32_DATA_DIST) \ + $(am__dist_icons48_DATA_DIST) $(am__dist_icons64_DATA_DIST) \ + $(am__dist_mimeicons128_DATA_DIST) \ + $(am__dist_mimeicons16_DATA_DIST) \ + $(am__dist_mimeicons256_DATA_DIST) \ + $(am__dist_mimeicons32_DATA_DIST) \ + $(am__dist_mimeicons48_DATA_DIST) \ + $(am__dist_mimeicons64_DATA_DIST) $(noinst_HEADERS) \ + $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = data/win32/fuse.manifest data/win32/installer.nsi +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ + "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(bashcompletiondir)" \ + "$(DESTDIR)$(icons128dir)" "$(DESTDIR)$(icons16dir)" \ + "$(DESTDIR)$(icons256dir)" "$(DESTDIR)$(icons32dir)" \ + "$(DESTDIR)$(icons48dir)" "$(DESTDIR)$(icons64dir)" \ + "$(DESTDIR)$(mimeicons128dir)" "$(DESTDIR)$(mimeicons16dir)" \ + "$(DESTDIR)$(mimeicons256dir)" "$(DESTDIR)$(mimeicons32dir)" \ + "$(DESTDIR)$(mimeicons48dir)" "$(DESTDIR)$(mimeicons64dir)" \ + "$(DESTDIR)$(fusemimedir)" "$(DESTDIR)$(metainfodir)" \ + "$(DESTDIR)$(pkgdatadir)" +PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) +am__fuse_SOURCES_DIST = display.c event.c fuse.c input.c keyboard.c \ + loader.c machine.c memory_pages.c mempool.c menu.c movie.c \ + module.c periph.c phantom_typist.c profile.c psg.c rectangle.c \ + rzx.c screenshot.c settings.c slt.c snapshot.c sound.c \ + spectrum.c svg.c tape.c ui.c uidisplay.c uimedia.c utils.c \ + windres.rc compat/dirname.c compat/getopt.c compat/getopt1.c \ + compat/unix/dir.c compat/unix/file.c compat/amiga/osname.c \ + compat/amiga/paths.c compat/unix/timer.c compat/unix/osname.c \ + compat/linux/relative_paths.c compat/unix/paths.c \ + compat/unix/socket.c compat/morphos/osname.c \ + compat/unix/relative_paths.c compat/wii/osname.c \ + compat/wii/paths.c compat/wii/timer.c compat/win32/osname.c \ + compat/win32/paths.c compat/win32/timer.c \ + compat/win32/socket.c compat/unix/tuntap.c \ + debugger/breakpoint.c debugger/command.c debugger/commandl.l \ + debugger/commandy.y debugger/debugger.c debugger/disassemble.c \ + debugger/event.c debugger/expression.c debugger/gdbserver.c \ + debugger/gdbserver_remote_commands.c \ + debugger/gdbserver_utils.c debugger/system_variable.c \ + debugger/packets.c debugger/variable.c debugger/vfile.c \ + debugger/vfile_ext.c infrastructure/startup_manager.c \ + machines/machines_periph.c machines/pentagon.c \ + machines/pentagon512.c machines/pentagon1024.c \ + machines/scorpion.c machines/spec128.c machines/spec16.c \ + machines/spec48.c machines/spec48_ntsc.c machines/specplus2.c \ + machines/spec_se.c machines/specplus2a.c machines/specplus3.c \ + machines/specplus3e.c machines/tc2048.c machines/tc2068.c \ + machines/ts2068.c peripherals/dck.c peripherals/if1.c \ + peripherals/if2.c peripherals/joystick.c \ + peripherals/kempmouse.c peripherals/multiface.c \ + peripherals/printer.c peripherals/scld.c \ + peripherals/speccyboot.c peripherals/ula.c \ + peripherals/usource.c peripherals/ttx2000s.c \ + peripherals/sound/ay.c peripherals/sound/covox.c \ + peripherals/sound/fuller.c peripherals/sound/melodik.c \ + peripherals/sound/sp0256.c peripherals/sound/specdrum.c \ + peripherals/sound/uspeech.c peripherals/disk/beta.c \ + peripherals/disk/crc.c peripherals/disk/didaktik.c \ + peripherals/disk/disciple.c peripherals/disk/disk.c \ + peripherals/disk/fdd.c peripherals/disk/opus.c \ + peripherals/disk/plusd.c peripherals/disk/trdos.c \ + peripherals/disk/upd_fdc.c peripherals/disk/wd_fdc.c \ + peripherals/ide/divide.c peripherals/ide/divmmc.c \ + peripherals/ide/divxxx.c peripherals/ide/ide.c \ + peripherals/ide/simpleide.c peripherals/ide/zxatasp.c \ + peripherals/ide/zxcf.c peripherals/ide/zxmmc.c \ + peripherals/spectranet.c peripherals/nic/enc28j60.c \ + peripherals/flash/am29f010.c peripherals/nic/w5100.c \ + peripherals/nic/w5100_socket.c peripherals/nic/dns_resolver.c \ + peripherals/nic/dns_processor.c \ + peripherals/nic/engines/engine_argv.c \ + peripherals/nic/engines/engine_fs.c \ + peripherals/nic/engines/engine_utf8.c \ + peripherals/nic/engines/json.c peripherals/nic/engines/xpath.c \ + peripherals/nic/engines/jsonpath/ast.c \ + peripherals/nic/engines/jsonpath/lexer.c \ + peripherals/nic/engines/jsonpath/matcher.c \ + peripherals/nic/engines/jsonpath/parser.c \ + peripherals/nic/engines/parson.c \ + peripherals/nic/spectranext_controller.c \ + peripherals/nic/spectranext_stdout.c peripherals/fs/xfs.c \ + peripherals/fs/xfs_compat.c peripherals/fs/xfs_worker.c \ + peripherals/fs/xfs_fs.c peripherals/fs/xfs_overlay.c \ + peripherals/fs/xfs_romfs.c peripherals/fs/ramfs.c \ + peripherals/fs/xfs_https.c peripherals/fs/xfs_https_compat.c \ + peripherals/http/httpc.c peripherals/http/http_sck.c \ + peripherals/security/tls.c peripherals/security/ssh.c \ + pokefinder/pokefinder.c pokefinder/pokemem.c \ + sound/blipbuffer.c timer/timer.c ui/fb/fbdisplay.c \ + ui/fb/fbdisplay.h ui/fb/fbjoystick.c ui/fb/fbkeyboard.c \ + ui/fb/fbkeyboard.h ui/fb/fbmouse.c ui/fb/fbmouse.h \ + ui/fb/fbui.c ui/fb/keysyms.c ui/gtk3/binary.c ui/gtk3/browse.c \ + ui/gtk3/confirm.c ui/gtk3/debugger.c ui/gtk3/fileselector.c \ + ui/gtk3/filter_options.c ui/gtk3/gtkdisplay.c \ + ui/gtk3/gtkinternals.h ui/gtk3/gtkjoystick.c \ + ui/gtk3/gtkkeyboard.c ui/gtk3/gtkmouse.c ui/gtk3/gtkui.c \ + ui/gtk3/keysyms.c ui/gtk3/menu_data.c ui/gtk3/options.c \ + ui/gtk3/picture.c ui/gtk3/pokefinder.c ui/gtk3/pokemem.c \ + ui/gtk3/resources.c ui/gtk3/resources.h ui/gtk3/rollback.c \ + ui/gtk3/roms.c ui/gtk3/statusbar.c ui/gtk3/stock.c \ + ui/gtk3/memory.c ui/null/null_ui.c ui/null/options.c \ + ui/scaler/scaler.c ui/scaler/snes_ntsc.c ui/sdl/sdldisplay.c \ + ui/sdl/sdldisplay.h ui/sdl/sdljoystick.c ui/sdl/sdljoystick.h \ + ui/sdl/sdlkeyboard.c ui/sdl/sdlkeyboard.h ui/sdl/sdlui.c \ + ui/sdl/keysyms.c ui/sdl2/sdl2_display_internal.c \ + ui/sdl2/sdl2_display_internal.h ui/sdl2/sdl2_scaler_state.c \ + ui/sdl2/sdl2_scaler_state.h ui/sdl2/sdl2_display.c \ + ui/sdl2/sdl2_display.h ui/sdl2/sdl2_joystick_internal.c \ + ui/sdl2/sdl2_joystick_internal.h ui/sdl2/sdl2_joystick.c \ + ui/sdl2/sdl2_joystick.h ui/sdl2/sdl2_keyboard.c \ + ui/sdl2/sdl2_keyboard.h ui/sdl2/sdl2_mouse_internal.c \ + ui/sdl2/sdl2_mouse_internal.h ui/sdl2/sdl2_ui.c \ + ui/sdl2/sdl2_ui.h ui/widget/about.c ui/widget/binary.c \ + ui/widget/browse.c ui/widget/debugger.c ui/widget/error.c \ + ui/widget/filesel.c ui/widget/memory.c ui/widget/menu.c \ + ui/widget/menu_data.c ui/widget/options.c ui/widget/picture.c \ + ui/widget/pokefinder.c ui/widget/pokemem.c ui/widget/query.c \ + ui/widget/roms.c ui/widget/select.c ui/widget/text.c \ + ui/widget/widget_internals.h ui/widget/widget.c \ + ui/widget/widget.h ui/wii/keysyms.c ui/wii/wiidisplay.c \ + ui/wii/wiidisplay.h ui/wii/wiijoystick.c ui/wii/wiikeyboard.c \ + ui/wii/wiikeyboard.h ui/wii/wiikeysyms.h ui/wii/wiimouse.c \ + ui/wii/wiimouse.h ui/wii/wiiui.c ui/win32/about.c \ + ui/win32/about.h ui/win32/binary.c ui/win32/binary.h \ + ui/win32/browse.c ui/win32/browse.h ui/win32/confirm.c \ + ui/win32/debugger.c ui/win32/debugger.h ui/win32/debuglog.c \ + ui/win32/debuglog.h ui/win32/fileselector.c \ + ui/win32/hyperlinks.c ui/win32/hyperlinks.h ui/win32/keysyms.c \ + ui/win32/memorybrowser.c ui/win32/memorybrowser.h \ + ui/win32/menu_data.c ui/win32/options.c ui/win32/picture.c \ + ui/win32/picture.h ui/win32/pokefinder.c ui/win32/pokefinder.h \ + ui/win32/pokemem.c ui/win32/pokemem.h ui/win32/rollback.c \ + ui/win32/rollback.h ui/win32/roms.c ui/win32/roms.h \ + ui/win32/select_template.h ui/win32/statusbar.c \ + ui/win32/win32display.c ui/win32/win32internals.h \ + ui/win32/win32joystick.c ui/win32/win32joystick.h \ + ui/win32/win32keyboard.c ui/win32/win32mouse.c \ + ui/win32/win32ui.c ui/win32/winsparkle.c ui/win32/winsparkle.h \ + ui/xlib/keysyms.c ui/xlib/xdisplay.c ui/xlib/xdisplay.h \ + ui/xlib/xerror.c ui/xlib/xjoystick.c ui/xlib/xkeyboard.c \ + ui/xlib/xkeyboard.h ui/xlib/xui.c ui/xlib/xui.h \ + unittests/unittests.c z80/z80.c z80/z80_debugger_variables.c \ + z80/z80_ops.c +am__objects_1 = +am__dirstamp = $(am__leading_dot)dirstamp +#am__objects_2 = compat/dirname.$(OBJEXT) +#am__objects_3 = compat/getopt.$(OBJEXT) \ +# compat/getopt1.$(OBJEXT) +#am__objects_4 = compat/unix/dir.$(OBJEXT) \ +# compat/unix/file.$(OBJEXT) \ +# compat/amiga/osname.$(OBJEXT) \ +# compat/amiga/paths.$(OBJEXT) \ +# compat/unix/timer.$(OBJEXT) +#am__objects_5 = compat/unix/dir.$(OBJEXT) \ +# compat/unix/file.$(OBJEXT) \ +# compat/unix/osname.$(OBJEXT) \ +# compat/linux/relative_paths.$(OBJEXT) \ +# compat/unix/paths.$(OBJEXT) \ +# compat/unix/timer.$(OBJEXT) +#am__objects_6 = compat/unix/socket.$(OBJEXT) +#am__objects_7 = compat/unix/dir.$(OBJEXT) \ +# compat/unix/file.$(OBJEXT) \ +# compat/morphos/osname.$(OBJEXT) \ +# compat/amiga/paths.$(OBJEXT) \ +# compat/unix/timer.$(OBJEXT) +am__objects_8 = compat/unix/dir.$(OBJEXT) \ + compat/unix/file.$(OBJEXT) \ + compat/unix/osname.$(OBJEXT) \ + compat/unix/relative_paths.$(OBJEXT) \ + compat/unix/paths.$(OBJEXT) \ + compat/unix/timer.$(OBJEXT) +am__objects_9 = compat/unix/socket.$(OBJEXT) +#am__objects_10 = compat/unix/dir.$(OBJEXT) \ +# compat/unix/file.$(OBJEXT) \ +# compat/wii/osname.$(OBJEXT) \ +# compat/wii/paths.$(OBJEXT) \ +# compat/wii/timer.$(OBJEXT) +#am__objects_11 = compat/unix/dir.$(OBJEXT) \ +# compat/unix/file.$(OBJEXT) \ +# compat/win32/osname.$(OBJEXT) \ +# compat/win32/paths.$(OBJEXT) \ +# compat/win32/timer.$(OBJEXT) +#am__objects_12 = compat/win32/socket.$(OBJEXT) +#am__objects_13 = compat/unix/tuntap.$(OBJEXT) +#am__objects_14 = debugger/vfile.$(OBJEXT) \ +# debugger/vfile_ext.$(OBJEXT) +#am__objects_15 = \ +# peripherals/nic/enc28j60.$(OBJEXT) +#am__objects_16 = \ +# peripherals/flash/am29f010.$(OBJEXT) \ +# peripherals/nic/w5100.$(OBJEXT) \ +# peripherals/nic/w5100_socket.$(OBJEXT) \ +# peripherals/nic/dns_resolver.$(OBJEXT) \ +# peripherals/nic/dns_processor.$(OBJEXT) \ +# peripherals/nic/engines/engine_argv.$(OBJEXT) \ +# peripherals/nic/engines/engine_fs.$(OBJEXT) \ +# peripherals/nic/engines/engine_utf8.$(OBJEXT) \ +# peripherals/nic/engines/json.$(OBJEXT) \ +# peripherals/nic/engines/xpath.$(OBJEXT) \ +# peripherals/nic/engines/jsonpath/ast.$(OBJEXT) \ +# peripherals/nic/engines/jsonpath/lexer.$(OBJEXT) \ +# peripherals/nic/engines/jsonpath/matcher.$(OBJEXT) \ +# peripherals/nic/engines/jsonpath/parser.$(OBJEXT) \ +# peripherals/nic/engines/parson.$(OBJEXT) \ +# peripherals/nic/spectranext_controller.$(OBJEXT) \ +# peripherals/nic/spectranext_stdout.$(OBJEXT) \ +# peripherals/fs/xfs.$(OBJEXT) \ +# peripherals/fs/xfs_compat.$(OBJEXT) \ +# peripherals/fs/xfs_worker.$(OBJEXT) \ +# peripherals/fs/xfs_fs.$(OBJEXT) \ +# peripherals/fs/xfs_overlay.$(OBJEXT) \ +# peripherals/fs/xfs_romfs.$(OBJEXT) \ +# peripherals/fs/ramfs.$(OBJEXT) \ +# peripherals/fs/xfs_https.$(OBJEXT) \ +# peripherals/fs/xfs_https_compat.$(OBJEXT) \ +# peripherals/http/httpc.$(OBJEXT) \ +# peripherals/http/http_sck.$(OBJEXT) \ +# peripherals/security/tls.$(OBJEXT) \ +# peripherals/security/ssh.$(OBJEXT) +am__objects_17 = ui/fb/fbdisplay.$(OBJEXT) ui/fb/fbjoystick.$(OBJEXT) \ + ui/fb/fbkeyboard.$(OBJEXT) ui/fb/fbmouse.$(OBJEXT) \ + ui/fb/fbui.$(OBJEXT) ui/fb/keysyms.$(OBJEXT) +#am__objects_18 = $(am__objects_17) +am__objects_19 = ui/gtk3/binary.$(OBJEXT) ui/gtk3/browse.$(OBJEXT) \ + ui/gtk3/confirm.$(OBJEXT) ui/gtk3/debugger.$(OBJEXT) \ + ui/gtk3/fileselector.$(OBJEXT) \ + ui/gtk3/filter_options.$(OBJEXT) ui/gtk3/gtkdisplay.$(OBJEXT) \ + ui/gtk3/gtkjoystick.$(OBJEXT) ui/gtk3/gtkkeyboard.$(OBJEXT) \ + ui/gtk3/gtkmouse.$(OBJEXT) ui/gtk3/gtkui.$(OBJEXT) \ + ui/gtk3/keysyms.$(OBJEXT) ui/gtk3/menu_data.$(OBJEXT) \ + ui/gtk3/options.$(OBJEXT) ui/gtk3/picture.$(OBJEXT) \ + ui/gtk3/pokefinder.$(OBJEXT) ui/gtk3/pokemem.$(OBJEXT) \ + ui/gtk3/resources.$(OBJEXT) ui/gtk3/rollback.$(OBJEXT) \ + ui/gtk3/roms.$(OBJEXT) ui/gtk3/statusbar.$(OBJEXT) \ + ui/gtk3/stock.$(OBJEXT) ui/gtk3/memory.$(OBJEXT) +#am__objects_20 = $(am__objects_19) +am__objects_21 = ui/null/null_ui.$(OBJEXT) ui/null/options.$(OBJEXT) +am__objects_22 = $(am__objects_21) +am__objects_23 = ui/sdl/sdldisplay.$(OBJEXT) \ + ui/sdl/sdljoystick.$(OBJEXT) ui/sdl/sdlkeyboard.$(OBJEXT) \ + ui/sdl/sdlui.$(OBJEXT) ui/sdl/keysyms.$(OBJEXT) +#am__objects_24 = $(am__objects_23) +am__objects_25 = ui/sdl2/sdl2_display_internal.$(OBJEXT) \ + ui/sdl2/sdl2_scaler_state.$(OBJEXT) \ + ui/sdl2/sdl2_display.$(OBJEXT) \ + ui/sdl2/sdl2_joystick_internal.$(OBJEXT) \ + ui/sdl2/sdl2_joystick.$(OBJEXT) \ + ui/sdl2/sdl2_keyboard.$(OBJEXT) \ + ui/sdl2/sdl2_mouse_internal.$(OBJEXT) \ + ui/sdl2/sdl2_ui.$(OBJEXT) +#am__objects_26 = $(am__objects_25) +am__objects_27 = ui/widget/about.$(OBJEXT) ui/widget/binary.$(OBJEXT) \ + ui/widget/browse.$(OBJEXT) ui/widget/debugger.$(OBJEXT) \ + ui/widget/error.$(OBJEXT) ui/widget/filesel.$(OBJEXT) \ + ui/widget/memory.$(OBJEXT) ui/widget/menu.$(OBJEXT) \ + ui/widget/menu_data.$(OBJEXT) ui/widget/options.$(OBJEXT) \ + ui/widget/picture.$(OBJEXT) ui/widget/pokefinder.$(OBJEXT) \ + ui/widget/pokemem.$(OBJEXT) ui/widget/query.$(OBJEXT) \ + ui/widget/roms.$(OBJEXT) ui/widget/select.$(OBJEXT) \ + ui/widget/text.$(OBJEXT) ui/widget/widget.$(OBJEXT) +#am__objects_28 = $(am__objects_27) +am__objects_29 = ui/wii/keysyms.$(OBJEXT) ui/wii/wiidisplay.$(OBJEXT) \ + ui/wii/wiijoystick.$(OBJEXT) ui/wii/wiikeyboard.$(OBJEXT) \ + ui/wii/wiimouse.$(OBJEXT) ui/wii/wiiui.$(OBJEXT) +#am__objects_30 = $(am__objects_29) +am__objects_31 = ui/win32/about.$(OBJEXT) ui/win32/binary.$(OBJEXT) \ + ui/win32/browse.$(OBJEXT) ui/win32/confirm.$(OBJEXT) \ + ui/win32/debugger.$(OBJEXT) ui/win32/debuglog.$(OBJEXT) \ + ui/win32/fileselector.$(OBJEXT) ui/win32/hyperlinks.$(OBJEXT) \ + ui/win32/keysyms.$(OBJEXT) ui/win32/memorybrowser.$(OBJEXT) \ + ui/win32/menu_data.$(OBJEXT) ui/win32/options.$(OBJEXT) \ + ui/win32/picture.$(OBJEXT) ui/win32/pokefinder.$(OBJEXT) \ + ui/win32/pokemem.$(OBJEXT) ui/win32/rollback.$(OBJEXT) \ + ui/win32/roms.$(OBJEXT) ui/win32/statusbar.$(OBJEXT) \ + ui/win32/win32display.$(OBJEXT) \ + ui/win32/win32joystick.$(OBJEXT) \ + ui/win32/win32keyboard.$(OBJEXT) ui/win32/win32mouse.$(OBJEXT) \ + ui/win32/win32ui.$(OBJEXT) ui/win32/winsparkle.$(OBJEXT) +#am__objects_32 = $(am__objects_31) +am__objects_33 = ui/xlib/keysyms.$(OBJEXT) ui/xlib/xdisplay.$(OBJEXT) \ + ui/xlib/xerror.$(OBJEXT) ui/xlib/xjoystick.$(OBJEXT) \ + ui/xlib/xkeyboard.$(OBJEXT) ui/xlib/xui.$(OBJEXT) +#am__objects_34 = $(am__objects_33) +am_fuse_OBJECTS = display.$(OBJEXT) event.$(OBJEXT) fuse.$(OBJEXT) \ + input.$(OBJEXT) keyboard.$(OBJEXT) loader.$(OBJEXT) \ + machine.$(OBJEXT) memory_pages.$(OBJEXT) mempool.$(OBJEXT) \ + menu.$(OBJEXT) movie.$(OBJEXT) module.$(OBJEXT) \ + periph.$(OBJEXT) phantom_typist.$(OBJEXT) profile.$(OBJEXT) \ + psg.$(OBJEXT) rectangle.$(OBJEXT) rzx.$(OBJEXT) \ + screenshot.$(OBJEXT) settings.$(OBJEXT) slt.$(OBJEXT) \ + snapshot.$(OBJEXT) sound.$(OBJEXT) spectrum.$(OBJEXT) \ + svg.$(OBJEXT) tape.$(OBJEXT) ui.$(OBJEXT) uidisplay.$(OBJEXT) \ + uimedia.$(OBJEXT) utils.$(OBJEXT) $(am__objects_1) \ + $(am__objects_2) $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_7) \ + $(am__objects_8) $(am__objects_9) $(am__objects_10) \ + $(am__objects_11) $(am__objects_12) $(am__objects_13) \ + debugger/breakpoint.$(OBJEXT) debugger/command.$(OBJEXT) \ + debugger/commandl.$(OBJEXT) debugger/commandy.$(OBJEXT) \ + debugger/debugger.$(OBJEXT) debugger/disassemble.$(OBJEXT) \ + debugger/event.$(OBJEXT) debugger/expression.$(OBJEXT) \ + debugger/gdbserver.$(OBJEXT) \ + debugger/gdbserver_remote_commands.$(OBJEXT) \ + debugger/gdbserver_utils.$(OBJEXT) \ + debugger/system_variable.$(OBJEXT) debugger/packets.$(OBJEXT) \ + debugger/variable.$(OBJEXT) $(am__objects_14) \ + infrastructure/startup_manager.$(OBJEXT) \ + machines/machines_periph.$(OBJEXT) machines/pentagon.$(OBJEXT) \ + machines/pentagon512.$(OBJEXT) machines/pentagon1024.$(OBJEXT) \ + machines/scorpion.$(OBJEXT) machines/spec128.$(OBJEXT) \ + machines/spec16.$(OBJEXT) machines/spec48.$(OBJEXT) \ + machines/spec48_ntsc.$(OBJEXT) machines/specplus2.$(OBJEXT) \ + machines/spec_se.$(OBJEXT) machines/specplus2a.$(OBJEXT) \ + machines/specplus3.$(OBJEXT) machines/specplus3e.$(OBJEXT) \ + machines/tc2048.$(OBJEXT) machines/tc2068.$(OBJEXT) \ + machines/ts2068.$(OBJEXT) peripherals/dck.$(OBJEXT) \ + peripherals/if1.$(OBJEXT) peripherals/if2.$(OBJEXT) \ + peripherals/joystick.$(OBJEXT) peripherals/kempmouse.$(OBJEXT) \ + peripherals/multiface.$(OBJEXT) peripherals/printer.$(OBJEXT) \ + peripherals/scld.$(OBJEXT) peripherals/speccyboot.$(OBJEXT) \ + peripherals/ula.$(OBJEXT) peripherals/usource.$(OBJEXT) \ + peripherals/ttx2000s.$(OBJEXT) peripherals/sound/ay.$(OBJEXT) \ + peripherals/sound/covox.$(OBJEXT) \ + peripherals/sound/fuller.$(OBJEXT) \ + peripherals/sound/melodik.$(OBJEXT) \ + peripherals/sound/sp0256.$(OBJEXT) \ + peripherals/sound/specdrum.$(OBJEXT) \ + peripherals/sound/uspeech.$(OBJEXT) \ + peripherals/disk/beta.$(OBJEXT) peripherals/disk/crc.$(OBJEXT) \ + peripherals/disk/didaktik.$(OBJEXT) \ + peripherals/disk/disciple.$(OBJEXT) \ + peripherals/disk/disk.$(OBJEXT) peripherals/disk/fdd.$(OBJEXT) \ + peripherals/disk/opus.$(OBJEXT) \ + peripherals/disk/plusd.$(OBJEXT) \ + peripherals/disk/trdos.$(OBJEXT) \ + peripherals/disk/upd_fdc.$(OBJEXT) \ + peripherals/disk/wd_fdc.$(OBJEXT) \ + peripherals/ide/divide.$(OBJEXT) \ + peripherals/ide/divmmc.$(OBJEXT) \ + peripherals/ide/divxxx.$(OBJEXT) peripherals/ide/ide.$(OBJEXT) \ + peripherals/ide/simpleide.$(OBJEXT) \ + peripherals/ide/zxatasp.$(OBJEXT) \ + peripherals/ide/zxcf.$(OBJEXT) peripherals/ide/zxmmc.$(OBJEXT) \ + peripherals/spectranet.$(OBJEXT) $(am__objects_15) \ + $(am__objects_16) pokefinder/pokefinder.$(OBJEXT) \ + pokefinder/pokemem.$(OBJEXT) sound/blipbuffer.$(OBJEXT) \ + timer/timer.$(OBJEXT) $(am__objects_18) $(am__objects_20) \ + $(am__objects_22) ui/scaler/scaler.$(OBJEXT) \ + ui/scaler/snes_ntsc.$(OBJEXT) $(am__objects_24) \ + $(am__objects_26) $(am__objects_28) $(am__objects_30) \ + $(am__objects_32) $(am__objects_34) \ + unittests/unittests.$(OBJEXT) z80/z80.$(OBJEXT) \ + z80/z80_debugger_variables.$(OBJEXT) z80/z80_ops.$(OBJEXT) +fuse_OBJECTS = $(am_fuse_OBJECTS) +am__DEPENDENCIES_1 = +#am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \ +# $(am__DEPENDENCIES_1) +#am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) +am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) +#am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1) \ +# windres.o +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +am__v_lt_1 = +fuse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(fuse_LDFLAGS) $(LDFLAGS) -o $@ +am_unittests_displaytest_OBJECTS = \ + unittests/displaytest-displaytest.$(OBJEXT) \ + unittests_displaytest-display.$(OBJEXT) +unittests_displaytest_OBJECTS = $(am_unittests_displaytest_OBJECTS) +unittests_displaytest_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_unittests_palcompositetest_OBJECTS = \ + unittests/palcompositetest-palcompositetest.$(OBJEXT) \ + ui/scaler/unittests_palcompositetest-snes_ntsc.$(OBJEXT) +unittests_palcompositetest_OBJECTS = \ + $(am_unittests_palcompositetest_OBJECTS) +unittests_palcompositetest_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + ui/scaler/scalers16.o ui/scaler/scalers32.o +am_unittests_scalerexpandtest_OBJECTS = \ + unittests/scalerexpandtest-scalerexpandtest.$(OBJEXT) \ + ui/scaler/unittests_scalerexpandtest-scaler.$(OBJEXT) +unittests_scalerexpandtest_OBJECTS = \ + $(am_unittests_scalerexpandtest_OBJECTS) +unittests_scalerexpandtest_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + ui/scaler/scalers16.o ui/scaler/scalers32.o \ + ui/scaler/snes_ntsc.o +am_unittests_sdl2displaytest_OBJECTS = \ + unittests/sdl2displaytest-sdl2displaytest.$(OBJEXT) \ + ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.$(OBJEXT) +unittests_sdl2displaytest_OBJECTS = \ + $(am_unittests_sdl2displaytest_OBJECTS) +unittests_sdl2displaytest_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_unittests_sdl2joysticktest_OBJECTS = \ + unittests/sdl2joysticktest-sdl2joysticktest.$(OBJEXT) \ + ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.$(OBJEXT) +unittests_sdl2joysticktest_OBJECTS = \ + $(am_unittests_sdl2joysticktest_OBJECTS) +unittests_sdl2joysticktest_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_unittests_sdl2mousetest_OBJECTS = \ + unittests/sdl2mousetest-sdl2mousetest.$(OBJEXT) \ + ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.$(OBJEXT) +unittests_sdl2mousetest_OBJECTS = \ + $(am_unittests_sdl2mousetest_OBJECTS) +unittests_sdl2mousetest_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_unittests_sdl2scalerstatetest_OBJECTS = \ + unittests/sdl2scalerstatetest-sdl2scalerstatetest.$(OBJEXT) \ + ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.$(OBJEXT) +unittests_sdl2scalerstatetest_OBJECTS = \ + $(am_unittests_sdl2scalerstatetest_OBJECTS) +unittests_sdl2scalerstatetest_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_z80_coretest_OBJECTS = z80/coretest-coretest.$(OBJEXT) \ + z80/coretest-z80.$(OBJEXT) +z80_coretest_OBJECTS = $(am_z80_coretest_OBJECTS) +z80_coretest_DEPENDENCIES = z80/z80_coretest.o $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/display.Po ./$(DEPDIR)/event.Po \ + ./$(DEPDIR)/fuse.Po ./$(DEPDIR)/input.Po \ + ./$(DEPDIR)/keyboard.Po ./$(DEPDIR)/loader.Po \ + ./$(DEPDIR)/machine.Po ./$(DEPDIR)/memory_pages.Po \ + ./$(DEPDIR)/mempool.Po ./$(DEPDIR)/menu.Po \ + ./$(DEPDIR)/module.Po ./$(DEPDIR)/movie.Po \ + ./$(DEPDIR)/periph.Po ./$(DEPDIR)/phantom_typist.Po \ + ./$(DEPDIR)/profile.Po ./$(DEPDIR)/psg.Po \ + ./$(DEPDIR)/rectangle.Po ./$(DEPDIR)/rzx.Po \ + ./$(DEPDIR)/screenshot.Po ./$(DEPDIR)/settings.Po \ + ./$(DEPDIR)/slt.Po ./$(DEPDIR)/snapshot.Po \ + ./$(DEPDIR)/sound.Po ./$(DEPDIR)/spectrum.Po \ + ./$(DEPDIR)/svg.Po ./$(DEPDIR)/tape.Po ./$(DEPDIR)/ui.Po \ + ./$(DEPDIR)/uidisplay.Po ./$(DEPDIR)/uimedia.Po \ + ./$(DEPDIR)/unittests_displaytest-display.Po \ + ./$(DEPDIR)/utils.Po compat/$(DEPDIR)/dirname.Po \ + compat/$(DEPDIR)/getopt.Po compat/$(DEPDIR)/getopt1.Po \ + compat/amiga/$(DEPDIR)/osname.Po \ + compat/amiga/$(DEPDIR)/paths.Po \ + compat/linux/$(DEPDIR)/relative_paths.Po \ + compat/morphos/$(DEPDIR)/osname.Po \ + compat/unix/$(DEPDIR)/dir.Po compat/unix/$(DEPDIR)/file.Po \ + compat/unix/$(DEPDIR)/osname.Po compat/unix/$(DEPDIR)/paths.Po \ + compat/unix/$(DEPDIR)/relative_paths.Po \ + compat/unix/$(DEPDIR)/socket.Po compat/unix/$(DEPDIR)/timer.Po \ + compat/unix/$(DEPDIR)/tuntap.Po compat/wii/$(DEPDIR)/osname.Po \ + compat/wii/$(DEPDIR)/paths.Po compat/wii/$(DEPDIR)/timer.Po \ + compat/win32/$(DEPDIR)/osname.Po \ + compat/win32/$(DEPDIR)/paths.Po \ + compat/win32/$(DEPDIR)/socket.Po \ + compat/win32/$(DEPDIR)/timer.Po \ + debugger/$(DEPDIR)/breakpoint.Po debugger/$(DEPDIR)/command.Po \ + debugger/$(DEPDIR)/commandl.Po debugger/$(DEPDIR)/commandy.Po \ + debugger/$(DEPDIR)/debugger.Po \ + debugger/$(DEPDIR)/disassemble.Po debugger/$(DEPDIR)/event.Po \ + debugger/$(DEPDIR)/expression.Po \ + debugger/$(DEPDIR)/gdbserver.Po \ + debugger/$(DEPDIR)/gdbserver_remote_commands.Po \ + debugger/$(DEPDIR)/gdbserver_utils.Po \ + debugger/$(DEPDIR)/packets.Po \ + debugger/$(DEPDIR)/system_variable.Po \ + debugger/$(DEPDIR)/variable.Po debugger/$(DEPDIR)/vfile.Po \ + debugger/$(DEPDIR)/vfile_ext.Po \ + infrastructure/$(DEPDIR)/startup_manager.Po \ + machines/$(DEPDIR)/machines_periph.Po \ + machines/$(DEPDIR)/pentagon.Po \ + machines/$(DEPDIR)/pentagon1024.Po \ + machines/$(DEPDIR)/pentagon512.Po \ + machines/$(DEPDIR)/scorpion.Po machines/$(DEPDIR)/spec128.Po \ + machines/$(DEPDIR)/spec16.Po machines/$(DEPDIR)/spec48.Po \ + machines/$(DEPDIR)/spec48_ntsc.Po \ + machines/$(DEPDIR)/spec_se.Po machines/$(DEPDIR)/specplus2.Po \ + machines/$(DEPDIR)/specplus2a.Po \ + machines/$(DEPDIR)/specplus3.Po \ + machines/$(DEPDIR)/specplus3e.Po machines/$(DEPDIR)/tc2048.Po \ + machines/$(DEPDIR)/tc2068.Po machines/$(DEPDIR)/ts2068.Po \ + peripherals/$(DEPDIR)/dck.Po peripherals/$(DEPDIR)/if1.Po \ + peripherals/$(DEPDIR)/if2.Po peripherals/$(DEPDIR)/joystick.Po \ + peripherals/$(DEPDIR)/kempmouse.Po \ + peripherals/$(DEPDIR)/multiface.Po \ + peripherals/$(DEPDIR)/printer.Po peripherals/$(DEPDIR)/scld.Po \ + peripherals/$(DEPDIR)/speccyboot.Po \ + peripherals/$(DEPDIR)/spectranet.Po \ + peripherals/$(DEPDIR)/ttx2000s.Po peripherals/$(DEPDIR)/ula.Po \ + peripherals/$(DEPDIR)/usource.Po \ + peripherals/disk/$(DEPDIR)/beta.Po \ + peripherals/disk/$(DEPDIR)/crc.Po \ + peripherals/disk/$(DEPDIR)/didaktik.Po \ + peripherals/disk/$(DEPDIR)/disciple.Po \ + peripherals/disk/$(DEPDIR)/disk.Po \ + peripherals/disk/$(DEPDIR)/fdd.Po \ + peripherals/disk/$(DEPDIR)/opus.Po \ + peripherals/disk/$(DEPDIR)/plusd.Po \ + peripherals/disk/$(DEPDIR)/trdos.Po \ + peripherals/disk/$(DEPDIR)/upd_fdc.Po \ + peripherals/disk/$(DEPDIR)/wd_fdc.Po \ + peripherals/flash/$(DEPDIR)/am29f010.Po \ + peripherals/fs/$(DEPDIR)/ramfs.Po \ + peripherals/fs/$(DEPDIR)/xfs.Po \ + peripherals/fs/$(DEPDIR)/xfs_compat.Po \ + peripherals/fs/$(DEPDIR)/xfs_fs.Po \ + peripherals/fs/$(DEPDIR)/xfs_https.Po \ + peripherals/fs/$(DEPDIR)/xfs_https_compat.Po \ + peripherals/fs/$(DEPDIR)/xfs_overlay.Po \ + peripherals/fs/$(DEPDIR)/xfs_romfs.Po \ + peripherals/fs/$(DEPDIR)/xfs_worker.Po \ + peripherals/http/$(DEPDIR)/http_sck.Po \ + peripherals/http/$(DEPDIR)/httpc.Po \ + peripherals/ide/$(DEPDIR)/divide.Po \ + peripherals/ide/$(DEPDIR)/divmmc.Po \ + peripherals/ide/$(DEPDIR)/divxxx.Po \ + peripherals/ide/$(DEPDIR)/ide.Po \ + peripherals/ide/$(DEPDIR)/simpleide.Po \ + peripherals/ide/$(DEPDIR)/zxatasp.Po \ + peripherals/ide/$(DEPDIR)/zxcf.Po \ + peripherals/ide/$(DEPDIR)/zxmmc.Po \ + peripherals/nic/$(DEPDIR)/dns_processor.Po \ + peripherals/nic/$(DEPDIR)/dns_resolver.Po \ + peripherals/nic/$(DEPDIR)/enc28j60.Po \ + peripherals/nic/$(DEPDIR)/spectranext_controller.Po \ + peripherals/nic/$(DEPDIR)/spectranext_stdout.Po \ + peripherals/nic/$(DEPDIR)/w5100.Po \ + peripherals/nic/$(DEPDIR)/w5100_socket.Po \ + peripherals/nic/engines/$(DEPDIR)/engine_argv.Po \ + peripherals/nic/engines/$(DEPDIR)/engine_fs.Po \ + peripherals/nic/engines/$(DEPDIR)/engine_utf8.Po \ + peripherals/nic/engines/$(DEPDIR)/json.Po \ + peripherals/nic/engines/$(DEPDIR)/parson.Po \ + peripherals/nic/engines/$(DEPDIR)/xpath.Po \ + peripherals/nic/engines/jsonpath/$(DEPDIR)/ast.Po \ + peripherals/nic/engines/jsonpath/$(DEPDIR)/lexer.Po \ + peripherals/nic/engines/jsonpath/$(DEPDIR)/matcher.Po \ + peripherals/nic/engines/jsonpath/$(DEPDIR)/parser.Po \ + peripherals/security/$(DEPDIR)/ssh.Po \ + peripherals/security/$(DEPDIR)/tls.Po \ + peripherals/sound/$(DEPDIR)/ay.Po \ + peripherals/sound/$(DEPDIR)/covox.Po \ + peripherals/sound/$(DEPDIR)/fuller.Po \ + peripherals/sound/$(DEPDIR)/melodik.Po \ + peripherals/sound/$(DEPDIR)/sp0256.Po \ + peripherals/sound/$(DEPDIR)/specdrum.Po \ + peripherals/sound/$(DEPDIR)/uspeech.Po \ + pokefinder/$(DEPDIR)/pokefinder.Po \ + pokefinder/$(DEPDIR)/pokemem.Po sound/$(DEPDIR)/alsasound.Po \ + sound/$(DEPDIR)/aosound.Po sound/$(DEPDIR)/blipbuffer.Po \ + sound/$(DEPDIR)/coreaudiosound.Po sound/$(DEPDIR)/dxsound.Po \ + sound/$(DEPDIR)/hpsound.Po sound/$(DEPDIR)/nullsound.Po \ + sound/$(DEPDIR)/osssound.Po sound/$(DEPDIR)/pulsesound.Po \ + sound/$(DEPDIR)/sdl2sound.Po sound/$(DEPDIR)/sdlsound.Po \ + sound/$(DEPDIR)/sfifo.Po sound/$(DEPDIR)/sunsound.Po \ + sound/$(DEPDIR)/wiisound.Po sound/$(DEPDIR)/win32sound.Po \ + timer/$(DEPDIR)/native.Po timer/$(DEPDIR)/sdl.Po \ + timer/$(DEPDIR)/timer.Po ui/fb/$(DEPDIR)/fbdisplay.Po \ + ui/fb/$(DEPDIR)/fbjoystick.Po ui/fb/$(DEPDIR)/fbkeyboard.Po \ + ui/fb/$(DEPDIR)/fbmouse.Po ui/fb/$(DEPDIR)/fbui.Po \ + ui/fb/$(DEPDIR)/keysyms.Po ui/gtk3/$(DEPDIR)/binary.Po \ + ui/gtk3/$(DEPDIR)/browse.Po ui/gtk3/$(DEPDIR)/confirm.Po \ + ui/gtk3/$(DEPDIR)/debugger.Po \ + ui/gtk3/$(DEPDIR)/fileselector.Po \ + ui/gtk3/$(DEPDIR)/filter_options.Po \ + ui/gtk3/$(DEPDIR)/gtkdisplay.Po \ + ui/gtk3/$(DEPDIR)/gtkjoystick.Po \ + ui/gtk3/$(DEPDIR)/gtkkeyboard.Po ui/gtk3/$(DEPDIR)/gtkmouse.Po \ + ui/gtk3/$(DEPDIR)/gtkui.Po ui/gtk3/$(DEPDIR)/keysyms.Po \ + ui/gtk3/$(DEPDIR)/memory.Po ui/gtk3/$(DEPDIR)/menu_data.Po \ + ui/gtk3/$(DEPDIR)/options.Po ui/gtk3/$(DEPDIR)/picture.Po \ + ui/gtk3/$(DEPDIR)/pokefinder.Po ui/gtk3/$(DEPDIR)/pokemem.Po \ + ui/gtk3/$(DEPDIR)/resources.Po ui/gtk3/$(DEPDIR)/rollback.Po \ + ui/gtk3/$(DEPDIR)/roms.Po ui/gtk3/$(DEPDIR)/statusbar.Po \ + ui/gtk3/$(DEPDIR)/stock.Po ui/null/$(DEPDIR)/null_ui.Po \ + ui/null/$(DEPDIR)/options.Po ui/scaler/$(DEPDIR)/scaler.Po \ + ui/scaler/$(DEPDIR)/snes_ntsc.Po \ + ui/scaler/$(DEPDIR)/unittests_palcompositetest-snes_ntsc.Po \ + ui/scaler/$(DEPDIR)/unittests_scalerexpandtest-scaler.Po \ + ui/sdl/$(DEPDIR)/keysyms.Po ui/sdl/$(DEPDIR)/sdldisplay.Po \ + ui/sdl/$(DEPDIR)/sdljoystick.Po \ + ui/sdl/$(DEPDIR)/sdlkeyboard.Po ui/sdl/$(DEPDIR)/sdlui.Po \ + ui/sdl2/$(DEPDIR)/sdl2_display.Po \ + ui/sdl2/$(DEPDIR)/sdl2_display_internal.Po \ + ui/sdl2/$(DEPDIR)/sdl2_joystick.Po \ + ui/sdl2/$(DEPDIR)/sdl2_joystick_internal.Po \ + ui/sdl2/$(DEPDIR)/sdl2_keyboard.Po \ + ui/sdl2/$(DEPDIR)/sdl2_mouse_internal.Po \ + ui/sdl2/$(DEPDIR)/sdl2_scaler_state.Po \ + ui/sdl2/$(DEPDIR)/sdl2_ui.Po \ + ui/sdl2/$(DEPDIR)/unittests_sdl2displaytest-sdl2_display_internal.Po \ + ui/sdl2/$(DEPDIR)/unittests_sdl2joysticktest-sdl2_joystick_internal.Po \ + ui/sdl2/$(DEPDIR)/unittests_sdl2mousetest-sdl2_mouse_internal.Po \ + ui/sdl2/$(DEPDIR)/unittests_sdl2scalerstatetest-sdl2_scaler_state.Po \ + ui/widget/$(DEPDIR)/about.Po ui/widget/$(DEPDIR)/binary.Po \ + ui/widget/$(DEPDIR)/browse.Po ui/widget/$(DEPDIR)/debugger.Po \ + ui/widget/$(DEPDIR)/error.Po ui/widget/$(DEPDIR)/filesel.Po \ + ui/widget/$(DEPDIR)/memory.Po ui/widget/$(DEPDIR)/menu.Po \ + ui/widget/$(DEPDIR)/menu_data.Po \ + ui/widget/$(DEPDIR)/options.Po ui/widget/$(DEPDIR)/picture.Po \ + ui/widget/$(DEPDIR)/pokefinder.Po \ + ui/widget/$(DEPDIR)/pokemem.Po ui/widget/$(DEPDIR)/query.Po \ + ui/widget/$(DEPDIR)/roms.Po ui/widget/$(DEPDIR)/select.Po \ + ui/widget/$(DEPDIR)/text.Po ui/widget/$(DEPDIR)/widget.Po \ + ui/wii/$(DEPDIR)/keysyms.Po ui/wii/$(DEPDIR)/wiidisplay.Po \ + ui/wii/$(DEPDIR)/wiijoystick.Po \ + ui/wii/$(DEPDIR)/wiikeyboard.Po ui/wii/$(DEPDIR)/wiimouse.Po \ + ui/wii/$(DEPDIR)/wiiui.Po ui/win32/$(DEPDIR)/about.Po \ + ui/win32/$(DEPDIR)/binary.Po ui/win32/$(DEPDIR)/browse.Po \ + ui/win32/$(DEPDIR)/confirm.Po ui/win32/$(DEPDIR)/debugger.Po \ + ui/win32/$(DEPDIR)/debuglog.Po \ + ui/win32/$(DEPDIR)/fileselector.Po \ + ui/win32/$(DEPDIR)/hyperlinks.Po ui/win32/$(DEPDIR)/keysyms.Po \ + ui/win32/$(DEPDIR)/memorybrowser.Po \ + ui/win32/$(DEPDIR)/menu_data.Po ui/win32/$(DEPDIR)/options.Po \ + ui/win32/$(DEPDIR)/picture.Po ui/win32/$(DEPDIR)/pokefinder.Po \ + ui/win32/$(DEPDIR)/pokemem.Po ui/win32/$(DEPDIR)/rollback.Po \ + ui/win32/$(DEPDIR)/roms.Po ui/win32/$(DEPDIR)/statusbar.Po \ + ui/win32/$(DEPDIR)/win32display.Po \ + ui/win32/$(DEPDIR)/win32joystick.Po \ + ui/win32/$(DEPDIR)/win32keyboard.Po \ + ui/win32/$(DEPDIR)/win32mouse.Po ui/win32/$(DEPDIR)/win32ui.Po \ + ui/win32/$(DEPDIR)/winsparkle.Po ui/xlib/$(DEPDIR)/keysyms.Po \ + ui/xlib/$(DEPDIR)/xdisplay.Po ui/xlib/$(DEPDIR)/xerror.Po \ + ui/xlib/$(DEPDIR)/xjoystick.Po ui/xlib/$(DEPDIR)/xkeyboard.Po \ + ui/xlib/$(DEPDIR)/xui.Po \ + unittests/$(DEPDIR)/displaytest-displaytest.Po \ + unittests/$(DEPDIR)/palcompositetest-palcompositetest.Po \ + unittests/$(DEPDIR)/scalerexpandtest-scalerexpandtest.Po \ + unittests/$(DEPDIR)/sdl2displaytest-sdl2displaytest.Po \ + unittests/$(DEPDIR)/sdl2joysticktest-sdl2joysticktest.Po \ + unittests/$(DEPDIR)/sdl2mousetest-sdl2mousetest.Po \ + unittests/$(DEPDIR)/sdl2scalerstatetest-sdl2scalerstatetest.Po \ + unittests/$(DEPDIR)/unittests.Po \ + z80/$(DEPDIR)/coretest-coretest.Po \ + z80/$(DEPDIR)/coretest-z80.Po z80/$(DEPDIR)/z80.Po \ + z80/$(DEPDIR)/z80_debugger_variables.Po \ + z80/$(DEPDIR)/z80_ops.Po +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) +LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS) +AM_V_LEX = $(am__v_LEX_$(V)) +am__v_LEX_ = $(am__v_LEX_$(AM_DEFAULT_VERBOSITY)) +am__v_LEX_0 = @echo " LEX " $@; +am__v_LEX_1 = +YLWRAP = $(top_srcdir)/ylwrap +am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ + -e s/c++$$/h++/ -e s/c$$/h/ +YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) +LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) +AM_V_YACC = $(am__v_YACC_$(V)) +am__v_YACC_ = $(am__v_YACC_$(AM_DEFAULT_VERBOSITY)) +am__v_YACC_0 = @echo " YACC " $@; +am__v_YACC_1 = +SOURCES = $(fuse_SOURCES) $(EXTRA_fuse_SOURCES) \ + $(unittests_displaytest_SOURCES) \ + $(unittests_palcompositetest_SOURCES) \ + $(unittests_scalerexpandtest_SOURCES) \ + $(unittests_sdl2displaytest_SOURCES) \ + $(unittests_sdl2joysticktest_SOURCES) \ + $(unittests_sdl2mousetest_SOURCES) \ + $(unittests_sdl2scalerstatetest_SOURCES) \ + $(z80_coretest_SOURCES) +DIST_SOURCES = $(am__fuse_SOURCES_DIST) $(EXTRA_fuse_SOURCES) \ + $(unittests_displaytest_SOURCES) \ + $(unittests_palcompositetest_SOURCES) \ + $(unittests_scalerexpandtest_SOURCES) \ + $(unittests_sdl2displaytest_SOURCES) \ + $(unittests_sdl2joysticktest_SOURCES) \ + $(unittests_sdl2mousetest_SOURCES) \ + $(unittests_sdl2scalerstatetest_SOURCES) \ + $(z80_coretest_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +am__dist_bashcompletion_DATA_DIST = data/shell-completion/bash/fuse +am__dist_icons128_DATA_DIST = \ + data/icons/128x128/net.sourceforge.fuse_emulator.Fuse.png +am__dist_icons16_DATA_DIST = \ + data/icons/16x16/net.sourceforge.fuse_emulator.Fuse.png +am__dist_icons256_DATA_DIST = \ + data/icons/256x256/net.sourceforge.fuse_emulator.Fuse.png +am__dist_icons32_DATA_DIST = \ + data/icons/32x32/net.sourceforge.fuse_emulator.Fuse.png +am__dist_icons48_DATA_DIST = \ + data/icons/48x48/net.sourceforge.fuse_emulator.Fuse.png +am__dist_icons64_DATA_DIST = \ + data/icons/64x64/net.sourceforge.fuse_emulator.Fuse.png +am__dist_mimeicons128_DATA_DIST = \ + data/icons/128x128/application-x-spectrum.png +am__dist_mimeicons16_DATA_DIST = \ + data/icons/16x16/application-x-spectrum.png +am__dist_mimeicons256_DATA_DIST = \ + data/icons/256x256/application-x-spectrum.png +am__dist_mimeicons32_DATA_DIST = \ + data/icons/32x32/application-x-spectrum.png +am__dist_mimeicons48_DATA_DIST = \ + data/icons/48x48/application-x-spectrum.png +am__dist_mimeicons64_DATA_DIST = \ + data/icons/64x64/application-x-spectrum.png +DATA = $(appdata_DATA) $(dist_bashcompletion_DATA) \ + $(dist_icons128_DATA) $(dist_icons16_DATA) \ + $(dist_icons256_DATA) $(dist_icons32_DATA) \ + $(dist_icons48_DATA) $(dist_icons64_DATA) \ + $(dist_mimeicons128_DATA) $(dist_mimeicons16_DATA) \ + $(dist_mimeicons256_DATA) $(dist_mimeicons32_DATA) \ + $(dist_mimeicons48_DATA) $(dist_mimeicons64_DATA) \ + $(fusemime_DATA) $(metainfo_DATA) $(pkgdata_DATA) +HEADERS = $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ + config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +AM_RECURSIVE_TARGETS = cscope +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/compat/Makefile.am \ + $(srcdir)/config.h.in $(srcdir)/data/Makefile.am \ + $(srcdir)/data/win32/distribution.mk \ + $(srcdir)/debugger/Makefile.am $(srcdir)/hacking/Makefile.am \ + $(srcdir)/infrastructure/Makefile.am $(srcdir)/lib/Makefile.am \ + $(srcdir)/machines/Makefile.am $(srcdir)/man/Makefile.am \ + $(srcdir)/peripherals/Makefile.am $(srcdir)/perl/Makefile.am \ + $(srcdir)/pokefinder/Makefile.am $(srcdir)/roms/Makefile.am \ + $(srcdir)/sound/Makefile.am $(srcdir)/timer/Makefile.am \ + $(srcdir)/ui/Makefile.am $(srcdir)/ui/fb/Makefile.am \ + $(srcdir)/ui/gtk3/Makefile.am $(srcdir)/ui/null/Makefile.am \ + $(srcdir)/ui/scaler/Makefile.am $(srcdir)/ui/sdl/Makefile.am \ + $(srcdir)/ui/sdl2/Makefile.am $(srcdir)/ui/widget/Makefile.am \ + $(srcdir)/ui/wii/Makefile.am $(srcdir)/ui/win32/Makefile.am \ + $(srcdir)/ui/xlib/Makefile.am $(srcdir)/unittests/Makefile.am \ + $(srcdir)/z80/Makefile.am \ + $(top_srcdir)/data/win32/fuse.manifest.in \ + $(top_srcdir)/data/win32/installer.nsi.in AUTHORS COPYING \ + ChangeLog INSTALL README THANKS TODO compile config.guess \ + config.sub debugger/commandl.c debugger/commandy.c depcomp \ + install-sh ltmain.sh missing ylwrap +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +# Exists only to be overridden by the user if desired. +AM_DISTCHECK_DVI_TARGET = dvi +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = ${SHELL} '/Users/desert/Documents/Work/spectranext/fuse/missing' aclocal-1.16 +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 0 +AR = ar +AUTOCONF = ${SHELL} '/Users/desert/Documents/Work/spectranext/fuse/missing' autoconf +AUTOHEADER = ${SHELL} '/Users/desert/Documents/Work/spectranext/fuse/missing' autoheader +AUTOMAKE = ${SHELL} '/Users/desert/Documents/Work/spectranext/fuse/missing' automake-1.16 +AWK = gawk +BASH_COMPLETION_DIR = +CC = gcc -std=gnu23 +CCDEPMODE = depmode=gcc3 +CFLAGS = -I/opt/homebrew/include -I/opt/homebrew/Cellar/boost/1.87.0/include +CPP = gcc -std=gnu23 -E +CPPFLAGS = -I/opt/homebrew/opt/openssl@3/include -I/opt/homebrew/Cellar/boost/1.87.0/include -I/opt/homebrew/opt/zlib/include +CSCOPE = cscope +CTAGS = ctags +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DESKTOP_DATADIR = ${datarootdir} +DLLTOOL = dlltool +DSYMUTIL = dsymutil +DUMPBIN = +ECHO_C = \c +ECHO_N = +ECHO_T = +EGREP = /usr/bin/grep -E +ETAGS = etags +EXEEXT = +FGREP = /usr/bin/grep -F +FILECMD = file +FUSE_COPYRIGHT = (c) 1999-2026 Philip Kendall and others +FUSE_FULL_VERSION = 1.8.0.1 +FUSE_URL = http://fuse-emulator.sourceforge.net/ +GLIB_CFLAGS = -I/opt/homebrew/Cellar/glib/2.86.3/include/glib-2.0 -I/opt/homebrew/Cellar/glib/2.86.3/lib/glib-2.0/include -I/opt/homebrew/opt/gettext/include -I/opt/homebrew/Cellar/pcre2/10.47/include +GLIB_LIBS = -L/opt/homebrew/Cellar/glib/2.86.3/lib -lglib-2.0 -L/opt/homebrew/opt/gettext/lib -lintl +GREP = /usr/bin/grep +GROFF = +GTK_CFLAGS = +GTK_LIBS = +GTK_UPDATE_ICON_CACHE = true +INSTALL = /opt/homebrew/bin/ginstall -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld +LDFLAGS = -L/opt/homebrew/opt/openssl@3/lib -L/opt/homebrew/lib -L/opt/homebrew/Cellar/boost/1.87.0/lib -L/opt/homebrew/opt/zlib/lib +LEX = flex +LEXLIB = -ll +LEX_OUTPUT_ROOT = lex.yy +LIBOBJS = +LIBS = -lz -lm +LIBSPECTRUM_CFLAGS = -I/usr/local/include +LIBSPECTRUM_LIBS = -L/usr/local/lib -lspectrum +LIBSPEC_HAVE_BZ2 = yes +LIBSPEC_HAVE_ZLIB = yes +LIBSSH2_CFLAGS = +LIBSSH2_LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = lipo +LN_S = ln -s +LTLIBOBJS = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} '/Users/desert/Documents/Work/spectranext/fuse/missing' makeinfo +MAN2HTML = +MANIFEST_TOOL = : +MBEDTLS_CFLAGS = +MBEDTLS_LIBS = +MKDIR_P = /opt/homebrew/bin/gmkdir -p +NM = /usr/bin/nm -B +NMEDIT = nmedit +OBJDUMP = objdump +OBJEXT = o +OPTIONS_DIR = null +OTOOL = otool +OTOOL64 = : +PACKAGE = fusex +PACKAGE_BUGREPORT = http://sourceforge.net/p/fuse-emulator/bugs/ +PACKAGE_NAME = fusex +PACKAGE_STRING = fusex 1.8.0-fusex-0.7 +PACKAGE_TARNAME = fusex +PACKAGE_URL = http://fuse-emulator.sourceforge.net/ +PACKAGE_VERSION = 1.8.0-fusex-0.7 +PATH_SEPARATOR = : +PERL = /opt/homebrew/bin/perl +PKG_CONFIG = /opt/homebrew/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = /opt/homebrew/opt/openssl@3/lib/pkgconfig +PNG_CFLAGS = -I/opt/homebrew/opt/libpng/include/libpng16 +PNG_LIBS = -L/opt/homebrew/opt/libpng/lib -lpng16 +PTHREAD_CC = +PTHREAD_CFLAGS = +PTHREAD_CXX = @PTHREAD_CXX@ +PTHREAD_LIBS = +RANLIB = ranlib +SDL1_CFLAGS = +SDL1_LIBS = +SDL2_CFLAGS = -I/opt/homebrew/include -I/opt/homebrew/include/SDL2 -D_THREAD_SAFE +SDL2_LIBS = -L/opt/homebrew/lib -lSDL2main -lSDL2 -Wl,-framework,Cocoa +SDL_CFLAGS = +SDL_CONFIG = no +SDL_LIBS = +SED = /opt/homebrew/bin/gsed +SET_MAKE = +SHELL = /bin/sh +SOUND_LIBADD = sound/sdl2sound.$(OBJEXT) sound/sfifo.$(OBJEXT) +SOUND_LIBS = +STRIP = strip +TIMER_LIBADD = timer/native.$(OBJEXT) +UI = null +UNIX2DOS = +VERSION = 1.8.0-fusex-0.7 +WARN_CFLAGS = -Wall -Wwrite-strings +WINDRES = +WINSPARKLE_CFLAGS = +WINSPARKLE_LIBS = +XMKMF = +XML_CFLAGS = +XML_LIBS = -lxml2 +X_CFLAGS = +X_EXTRA_LIBS = +X_LIBS = +X_PRE_LIBS = +YACC = bison -y +YFLAGS = -d +abs_builddir = /Users/desert/Documents/Work/spectranext/fuse +abs_srcdir = /Users/desert/Documents/Work/spectranext/fuse +abs_top_builddir = /Users/desert/Documents/Work/spectranext/fuse +abs_top_srcdir = /Users/desert/Documents/Work/spectranext/fuse +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +ax_pthread_config = +bindir = ${exec_prefix}/bin +build = aarch64-apple-darwin25.5.0 +build_alias = +build_cpu = aarch64 +build_os = darwin25.5.0 +build_vendor = apple +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = aarch64-apple-darwin25.5.0 +host_alias = +host_cpu = aarch64 +host_os = darwin25.5.0 +host_vendor = apple +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /Users/desert/Documents/Work/spectranext/fuse/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = +top_builddir = . +top_srcdir = . +ACLOCAL_AMFLAGS = -I m4 +fuse_SOURCES = display.c event.c fuse.c input.c keyboard.c loader.c \ + machine.c memory_pages.c mempool.c menu.c movie.c module.c \ + periph.c phantom_typist.c profile.c psg.c rectangle.c rzx.c \ + screenshot.c settings.c slt.c snapshot.c sound.c spectrum.c \ + svg.c tape.c ui.c uidisplay.c uimedia.c utils.c \ + $(am__append_7) $(am__append_11) $(am__append_12) \ + $(am__append_13) $(am__append_14) $(am__append_15) \ + $(am__append_16) $(am__append_17) $(am__append_18) \ + $(am__append_19) $(am__append_20) $(am__append_21) \ + $(am__append_22) debugger/breakpoint.c debugger/command.c \ + debugger/commandl.l debugger/commandy.y debugger/debugger.c \ + debugger/disassemble.c debugger/event.c debugger/expression.c \ + debugger/gdbserver.c debugger/gdbserver_remote_commands.c \ + debugger/gdbserver_utils.c debugger/system_variable.c \ + debugger/packets.c debugger/variable.c $(am__append_23) \ + infrastructure/startup_manager.c machines/machines_periph.c \ + machines/pentagon.c machines/pentagon512.c \ + machines/pentagon1024.c machines/scorpion.c machines/spec128.c \ + machines/spec16.c machines/spec48.c machines/spec48_ntsc.c \ + machines/specplus2.c machines/spec_se.c machines/specplus2a.c \ + machines/specplus3.c machines/specplus3e.c machines/tc2048.c \ + machines/tc2068.c machines/ts2068.c peripherals/dck.c \ + peripherals/if1.c peripherals/if2.c peripherals/joystick.c \ + peripherals/kempmouse.c peripherals/multiface.c \ + peripherals/printer.c peripherals/scld.c \ + peripherals/speccyboot.c peripherals/ula.c \ + peripherals/usource.c peripherals/ttx2000s.c \ + peripherals/sound/ay.c peripherals/sound/covox.c \ + peripherals/sound/fuller.c peripherals/sound/melodik.c \ + peripherals/sound/sp0256.c peripherals/sound/specdrum.c \ + peripherals/sound/uspeech.c peripherals/disk/beta.c \ + peripherals/disk/crc.c peripherals/disk/didaktik.c \ + peripherals/disk/disciple.c peripherals/disk/disk.c \ + peripherals/disk/fdd.c peripherals/disk/opus.c \ + peripherals/disk/plusd.c peripherals/disk/trdos.c \ + peripherals/disk/upd_fdc.c peripherals/disk/wd_fdc.c \ + peripherals/ide/divide.c peripherals/ide/divmmc.c \ + peripherals/ide/divxxx.c peripherals/ide/ide.c \ + peripherals/ide/simpleide.c peripherals/ide/zxatasp.c \ + peripherals/ide/zxcf.c peripherals/ide/zxmmc.c \ + peripherals/spectranet.c $(am__append_24) $(am__append_25) \ + pokefinder/pokefinder.c pokefinder/pokemem.c \ + sound/blipbuffer.c timer/timer.c $(am__append_26) \ + $(am__append_28) $(am__append_30) ui/scaler/scaler.c \ + ui/scaler/snes_ntsc.c $(am__append_32) $(am__append_34) \ + $(am__append_35) $(am__append_38) $(am__append_40) \ + $(am__append_42) unittests/unittests.c z80/z80.c \ + z80/z80_debugger_variables.c z80/z80_ops.c +fuse_LDADD = $(PTHREAD_LIBS) $(LIBSPECTRUM_LIBS) $(GTK_LIBS) \ + $(GLIB_LIBS) $(PNG_LIBS) $(X_LIBS) $(XML_LIBS) $(am__append_1) \ + $(am__append_2) $(am__append_3) $(am__append_8) $(SOUND_LIBS) \ + $(SOUND_LIBADD) $(TIMER_LIBADD) ui/scaler/scalers16.o \ + ui/scaler/scalers32.o +fuse_DEPENDENCIES = $(am__append_9) $(SOUND_LIBADD) $(TIMER_LIBADD) \ + ui/scaler/scalers16.o ui/scaler/scalers32.o +EXTRA_fuse_SOURCES = sound/alsasound.c sound/aosound.c \ + sound/coreaudiosound.c sound/dxsound.c sound/hpsound.c \ + sound/nullsound.c sound/osssound.c sound/pulsesound.c \ + sound/sdl2sound.c sound/sdlsound.c sound/sfifo.c \ + sound/sunsound.c sound/wiisound.c sound/win32sound.c \ + timer/native.c timer/sdl.c $(ui_xlib_files) +BUILT_SOURCES = options.h settings.c settings.h debugger/commandy.c \ + debugger/commandy.h debugger/commandl.c $(am__append_27) \ + $(am__append_29) $(am__append_31) $(am__append_33) \ + $(am__append_36) $(am__append_39) $(am__append_41) \ + $(am__append_43) z80/opcodes_base.c z80/z80_cb.c \ + z80/z80_ddfd.c z80/z80_ddfdcb.c z80/z80_ed.c +AM_CPPFLAGS = $(GLIB_CFLAGS) $(GTK_CFLAGS) $(LIBSPECTRUM_CFLAGS) \ + $(XML_CFLAGS) -DFUSEDATADIR="\"${pkgdatadir}\"" $(PNG_CFLAGS) \ + $(am__append_4) $(am__append_5) $(am__append_6) \ + $(am__append_10) +AM_CFLAGS = $(WARN_CFLAGS) $(PTHREAD_CFLAGS) +noinst_HEADERS = bitmap.h compat.h display.h event.h fuse.h input.h \ + keyboard.h loader.h machine.h memory_pages.h mempool.h menu.h \ + movie.h movie_tables.h module.h periph.h phantom_typist.h \ + psg.h rectangle.h rzx.h screenshot.h settings.h slt.h \ + snapshot.h sound.h spectrum.h svg.h tape.h utils.h options.h \ + profile.h compat/getopt.h debugger/breakpoint.h \ + debugger/commandy.h debugger/debugger.h \ + debugger/debugger_internals.h debugger/gdbserver.h \ + debugger/gdbserver_remote_commands.h debugger/vfile.h \ + debugger/vfile_ext.h infrastructure/startup_manager.h \ + machines/machines.h machines/machines_periph.h \ + machines/pentagon.h machines/scorpion.h machines/spec128.h \ + machines/spec48.h machines/specplus3.h machines/tc2068.h \ + peripherals/dck.h peripherals/if1.h peripherals/if2.h \ + peripherals/joystick.h peripherals/kempmouse.h \ + peripherals/multiface.h peripherals/printer.h \ + peripherals/scld.h peripherals/speccyboot.h \ + peripherals/spectranet.h peripherals/ula.h \ + peripherals/usource.h peripherals/ttx2000s.h \ + peripherals/sound/ay.h peripherals/sound/covox.h \ + peripherals/sound/fuller.h peripherals/sound/melodik.h \ + peripherals/sound/sp0256.h peripherals/sound/specdrum.h \ + peripherals/sound/uspeech.h peripherals/disk/beta.h \ + peripherals/disk/crc.h peripherals/disk/didaktik.h \ + peripherals/disk/disciple.h peripherals/disk/disk.h \ + peripherals/disk/fdd.h peripherals/disk/opus.h \ + peripherals/disk/plusd.h peripherals/disk/trdos.h \ + peripherals/disk/upd_fdc.h peripherals/disk/wd_fdc.h \ + peripherals/ide/divide.h peripherals/ide/divmmc.h \ + peripherals/ide/divxxx.h peripherals/ide/ide.h \ + peripherals/ide/simpleide.h peripherals/ide/zxatasp.h \ + peripherals/ide/zxcf.h peripherals/ide/zxmmc.h \ + peripherals/flash/am29f010.h peripherals/nic/enc28j60.h \ + peripherals/nic/w5100.h peripherals/nic/w5100_internals.h \ + peripherals/security/tls.h peripherals/security/ssh.h \ + peripherals/security/mbedtls_config.h pokefinder/pokefinder.h \ + pokefinder/pokemem.h sound/blipbuffer.h sound/sfifo.h \ + timer/timer.h ui/ui.h ui/uidisplay.h ui/uijoystick.h \ + ui/uimedia.h ui/scaler/scaler.h ui/scaler/scaler_internals.h \ + ui/scaler/snes_ntsc.h ui/scaler/snes_ntsc_config.h \ + ui/scaler/snes_ntsc_impl.h unittests/unittests.h z80/z80.h \ + z80/z80_checks.h z80/z80_internals.h z80/z80_macros.h +EXTRA_DIST = AUTHORS INSTALL PORTING README THANKS keysyms.dat \ + keysyms.pl m4/ax_pthread.m4 m4/ax_string_strcasecmp.m4 \ + m4/pkg.m4 m4/sdl.m4 menu_data.dat menu_data.pl settings.dat \ + settings.pl settings-win32.pl settings-header.pl \ + update-release.py .agents/skills/README.md \ + .agents/skills/update-changelog/SKILL.md \ + data/net.sourceforge.fuse_emulator.Fuse.desktop.in \ + data/net.sourceforge.fuse_emulator.Fuse.metainfo.xml \ + data/fuse.xml.in data/shell-completion/diff_options.sh \ + data/win32/LICENSES.txt data/win32/README-win32.txt \ + data/win32/check_win32_dll_deps.sh data/win32/fuse.manifest.in \ + data/win32/installer.nsi.in data/win32/winfuse.ico \ + data/win32/WinSparkle.dll data/win32/libWinSparkle.a \ + data/win32/WinSparkle.def data/win32/winsparkle.h \ + data/win32/winsparkle-version.h data/win32/winsparkle-tool.exe \ + data/win32/generate-appcast.sh hacking/code_beautifiers.txt \ + hacking/coding_style.txt hacking/cvs-tags \ + hacking/implementation_notes.txt hacking/input.txt \ + hacking/peripheral_tests.txt hacking/releasing.md \ + hacking/sound.txt hacking/spectranet.txt \ + hacking/tc2048_tech_notes.txt hacking/timer.txt \ + hacking/unittests.txt hacking/ui.txt hacking/uncrustify.cfg \ + hacking/valgrind.supp $(lib_files) $(lib_tests) $(man_MANS) \ + perl/cpp-perl.pl perl/Fuse.pm perl/Fuse/Dialog.pm $(ROMS) \ + roms/README.copyright roms/spectranext-launcher/boot.zx \ + roms/spectranext-launcher/launcher.bin ui/options.dat \ + ui/uijoystick.c $(gtkui_resource_files) ui/gtk3/options.pl \ + ui/gtk3/options-header.pl ui/gtk3/resources.xml \ + ui/null/options.pl ui/null/options-header.pl \ + ui/scaler/scalers.c ui/scaler/scaler_hq2x.c \ + ui/scaler/scaler_hq3x.c ui/scaler/scaler_hq4x.c \ + ui/widget/fuse.font.sbf ui/widget/mkfusefont.pl \ + ui/widget/options.pl ui/widget/options-header.pl \ + ui/win32/icons/disk_active.bmp \ + ui/win32/icons/disk_inactive.bmp ui/win32/icons/mdr_active.bmp \ + ui/win32/icons/mdr_inactive.bmp \ + ui/win32/icons/mouse_active.bmp \ + ui/win32/icons/mouse_inactive.bmp \ + ui/win32/icons/pause_active.bmp \ + ui/win32/icons/pause_inactive.bmp \ + ui/win32/icons/tape_active.bmp \ + ui/win32/icons/tape_inactive.bmp \ + ui/win32/icons/tape_marker.bmp \ + ui/win32/icons/tape_marker_mask.bmp ui/win32/options.pl \ + ui/win32/options-header.pl ui/win32/options-resource.pl \ + $(ui_win32_rc_files) ui/xlib/xpixmaps.c ui/xlib/xpixmaps.c.in \ + ui/xlib/xstatusbar.pl z80/tests/README \ + z80/tests/tests.expected z80/tests/tests.in z80/opcodes_base.c \ + z80/opcodes_base.dat z80/opcodes_cb.dat z80/opcodes_ddfd.dat \ + z80/opcodes_ddfdcb.dat z80/opcodes_ed.dat z80/z80.pl \ + z80/z80_cb.c z80/z80_ddfd.c z80/z80_ddfdcb.c z80/z80_ed.c +CLEANFILES = options.h settings.c settings.h \ + data/net.sourceforge.fuse_emulator.Fuse.desktop data/fuse.xml \ + data/shell-completion/bash.txt data/shell-completion/man.txt \ + data/shell-completion/settings.txt debugger/commandl.c \ + debugger/commandy.c debugger/commandy.h $(ui_fb_built) \ + $(ui_gtk_built) ui/gtk3/options.stamp $(ui_null_built) \ + ui/scaler/scalers16.o ui/scaler/scalers32.o \ + ui/scaler/snes_ntsc.o $(ui_sdl_built) $(ui_widget_built) \ + $(ui_wii_built) $(ui_win32_built) $(ui_xlib_built) \ + z80/opcodes_base.c z80/tests.actual z80/z80_cb.c \ + z80/z80_coretest.o z80/z80_ddfd.c z80/z80_ddfdcb.c \ + z80/z80_ed.c +DISTCLEANFILES = +pkgdata_DATA = $(lib_files) $(ROMS) $(am__append_37) +#fuse_LDFLAGS = -mwindows +#fusemimedir = $(DESKTOP_DATADIR)/mime/packages +#fusemime_DATA = data/fuse.xml +#appdatadir = $(DESKTOP_DATADIR)/applications +#appdata_DATA = data/net.sourceforge.fuse_emulator.Fuse.desktop +#metainfodir = $(DESKTOP_DATADIR)/metainfo +#metainfo_DATA = data/net.sourceforge.fuse_emulator.Fuse.metainfo.xml +#iconsdatadir = $(DESKTOP_DATADIR)/icons/hicolor +#icons16dir = $(iconsdatadir)/16x16/apps +#icons32dir = $(iconsdatadir)/32x32/apps +#icons48dir = $(iconsdatadir)/48x48/apps +#icons64dir = $(iconsdatadir)/64x64/apps +#icons128dir = $(iconsdatadir)/128x128/apps +#icons256dir = $(iconsdatadir)/256x256/apps +#dist_icons16_DATA = data/icons/16x16/net.sourceforge.fuse_emulator.Fuse.png +#dist_icons32_DATA = data/icons/32x32/net.sourceforge.fuse_emulator.Fuse.png +#dist_icons48_DATA = data/icons/48x48/net.sourceforge.fuse_emulator.Fuse.png +#dist_icons64_DATA = data/icons/64x64/net.sourceforge.fuse_emulator.Fuse.png +#dist_icons128_DATA = data/icons/128x128/net.sourceforge.fuse_emulator.Fuse.png +#dist_icons256_DATA = data/icons/256x256/net.sourceforge.fuse_emulator.Fuse.png +#mimeicons16dir = $(iconsdatadir)/16x16/mimetypes +#mimeicons32dir = $(iconsdatadir)/32x32/mimetypes +#mimeicons48dir = $(iconsdatadir)/48x48/mimetypes +#mimeicons64dir = $(iconsdatadir)/64x64/mimetypes +#mimeicons128dir = $(iconsdatadir)/128x128/mimetypes +#mimeicons256dir = $(iconsdatadir)/256x256/mimetypes +#dist_mimeicons16_DATA = data/icons/16x16/application-x-spectrum.png +#dist_mimeicons32_DATA = data/icons/32x32/application-x-spectrum.png +#dist_mimeicons48_DATA = data/icons/48x48/application-x-spectrum.png +#dist_mimeicons64_DATA = data/icons/64x64/application-x-spectrum.png +#dist_mimeicons128_DATA = data/icons/128x128/application-x-spectrum.png +#dist_mimeicons256_DATA = data/icons/256x256/application-x-spectrum.png +##EXTRA_DESKTOP_CATEGORIES = GTK; +#bashcompletiondir = $(BASH_COMPLETION_DIR) +#dist_bashcompletion_DATA = data/shell-completion/bash/fuse +#package_win32 = $(PACKAGE)-$(PACKAGE_VERSION)-$(UI) +#top_win32dir = $(top_builddir)/$(package_win32) +lib_files = \ + lib/cassette.bmp \ + lib/keyboard.png \ + lib/keyboard.scr \ + lib/microdrive.bmp \ + lib/plus3disk.bmp + +lib_tests = \ + lib/tests/fatware-success.hdf.bz2 \ + lib/tests/idedos-success.hdf.bz2 \ + lib/tests/success.d80.bz2 \ + lib/tests/success.mdr \ + lib/tests/success.mgt.bz2 \ + lib/tests/success.opd \ + lib/tests/success.udi + +man_MANS = man/fuse.1 +ROMS = \ + roms/128-0.rom \ + roms/128-1.rom \ + roms/128p-0.rom \ + roms/128p-1.rom \ + roms/256s-0.rom \ + roms/256s-1.rom \ + roms/256s-2.rom \ + roms/256s-3.rom \ + roms/48.rom \ + roms/disciple.rom \ + roms/gluck.rom \ + roms/plus2-0.rom \ + roms/plus2-1.rom \ + roms/plus3-0.rom \ + roms/plus3-1.rom \ + roms/plus3-2.rom \ + roms/plus3-3.rom \ + roms/plus3e-0.rom \ + roms/plus3e-1.rom \ + roms/plus3e-2.rom \ + roms/plus3e-3.rom \ + roms/plusd.rom \ + roms/tc2048.rom \ + roms/tc2068-0.rom \ + roms/tc2068-1.rom \ + roms/trdos.rom \ + roms/se-0.rom \ + roms/se-1.rom \ + roms/speccyboot-1.4.rom \ + roms/spxromfs.bin + +ui_fb_files = \ + ui/fb/fbdisplay.c \ + ui/fb/fbdisplay.h \ + ui/fb/fbjoystick.c \ + ui/fb/fbkeyboard.c \ + ui/fb/fbkeyboard.h \ + ui/fb/fbmouse.c \ + ui/fb/fbmouse.h \ + ui/fb/fbui.c \ + ui/fb/keysyms.c + +ui_fb_built = ui/fb/keysyms.c +gtkui_resource_files = \ + ui/gtk3/icons/disk_active.png \ + ui/gtk3/icons/disk_inactive.png \ + ui/gtk3/icons/mdr_active.png \ + ui/gtk3/icons/mdr_inactive.png \ + ui/gtk3/icons/mouse_active.png \ + ui/gtk3/icons/mouse_inactive.png \ + ui/gtk3/icons/pause_active.png \ + ui/gtk3/icons/pause_inactive.png \ + ui/gtk3/icons/tape_active.png \ + ui/gtk3/icons/tape_inactive.png \ + ui/gtk3/icons/tape_marker.png + +gtkui_built_resource_files = \ + ui/gtk3/menu_data.ui + +ui_gtk_files = \ + ui/gtk3/binary.c \ + ui/gtk3/browse.c \ + ui/gtk3/confirm.c \ + ui/gtk3/debugger.c \ + ui/gtk3/fileselector.c \ + ui/gtk3/filter_options.c \ + ui/gtk3/gtkdisplay.c \ + ui/gtk3/gtkinternals.h \ + ui/gtk3/gtkjoystick.c \ + ui/gtk3/gtkkeyboard.c \ + ui/gtk3/gtkmouse.c \ + ui/gtk3/gtkui.c \ + ui/gtk3/keysyms.c \ + ui/gtk3/menu_data.c \ + ui/gtk3/options.c \ + ui/gtk3/picture.c \ + ui/gtk3/pokefinder.c \ + ui/gtk3/pokemem.c \ + ui/gtk3/resources.c \ + ui/gtk3/resources.h \ + ui/gtk3/rollback.c \ + ui/gtk3/roms.c \ + ui/gtk3/statusbar.c \ + ui/gtk3/stock.c \ + ui/gtk3/memory.c + +ui_gtk_built = \ + ui/gtk3/keysyms.c \ + ui/gtk3/menu_data.c \ + ui/gtk3/menu_data.ui \ + ui/gtk3/options.c \ + ui/gtk3/options_internals.h \ + ui/gtk3/resources.c \ + ui/gtk3/resources.h + +ui_null_files = \ + ui/null/null_ui.c \ + ui/null/options.c + +ui_null_built = \ + ui/null/options.c + +ui_sdl_files = \ + ui/sdl/sdldisplay.c \ + ui/sdl/sdldisplay.h \ + ui/sdl/sdljoystick.c \ + ui/sdl/sdljoystick.h \ + ui/sdl/sdlkeyboard.c \ + ui/sdl/sdlkeyboard.h \ + ui/sdl/sdlui.c \ + ui/sdl/keysyms.c + +ui_sdl_built = ui/sdl/keysyms.c +ui_sdl2_files = \ + ui/sdl2/sdl2_display_internal.c \ + ui/sdl2/sdl2_display_internal.h \ + ui/sdl2/sdl2_scaler_state.c \ + ui/sdl2/sdl2_scaler_state.h \ + ui/sdl2/sdl2_display.c \ + ui/sdl2/sdl2_display.h \ + ui/sdl2/sdl2_joystick_internal.c \ + ui/sdl2/sdl2_joystick_internal.h \ + ui/sdl2/sdl2_joystick.c \ + ui/sdl2/sdl2_joystick.h \ + ui/sdl2/sdl2_keyboard.c \ + ui/sdl2/sdl2_keyboard.h \ + ui/sdl2/sdl2_mouse_internal.c \ + ui/sdl2/sdl2_mouse_internal.h \ + ui/sdl2/sdl2_ui.c \ + ui/sdl2/sdl2_ui.h + +ui_widget_files = \ + ui/widget/about.c \ + ui/widget/binary.c \ + ui/widget/browse.c \ + ui/widget/debugger.c \ + ui/widget/error.c \ + ui/widget/filesel.c \ + ui/widget/memory.c \ + ui/widget/menu.c \ + ui/widget/menu_data.c \ + ui/widget/options.c \ + ui/widget/picture.c \ + ui/widget/pokefinder.c \ + ui/widget/pokemem.c \ + ui/widget/query.c \ + ui/widget/roms.c \ + ui/widget/select.c \ + ui/widget/text.c \ + ui/widget/widget_internals.h \ + ui/widget/widget.c \ + ui/widget/widget.h + +ui_widget_built = \ + ui/widget/fuse.font \ + ui/widget/menu_data.c \ + ui/widget/options.c \ + ui/widget/options_internals.h + +ui_wii_files = \ + ui/wii/keysyms.c \ + ui/wii/wiidisplay.c \ + ui/wii/wiidisplay.h \ + ui/wii/wiijoystick.c \ + ui/wii/wiikeyboard.c \ + ui/wii/wiikeyboard.h \ + ui/wii/wiikeysyms.h \ + ui/wii/wiimouse.c \ + ui/wii/wiimouse.h \ + ui/wii/wiiui.c + +ui_wii_built = ui/wii/keysyms.c +#ui_win32_res = $(ui_win32_rc_files) +ui_win32_files = \ + ui/win32/about.c \ + ui/win32/about.h \ + ui/win32/binary.c \ + ui/win32/binary.h \ + ui/win32/browse.c \ + ui/win32/browse.h \ + ui/win32/confirm.c \ + ui/win32/debugger.c \ + ui/win32/debugger.h \ + ui/win32/debuglog.c \ + ui/win32/debuglog.h \ + ui/win32/fileselector.c \ + ui/win32/hyperlinks.c \ + ui/win32/hyperlinks.h \ + ui/win32/keysyms.c \ + ui/win32/memorybrowser.c \ + ui/win32/memorybrowser.h \ + ui/win32/menu_data.c \ + ui/win32/options.c \ + ui/win32/picture.c \ + ui/win32/picture.h \ + ui/win32/pokefinder.c \ + ui/win32/pokefinder.h \ + ui/win32/pokemem.c \ + ui/win32/pokemem.h \ + ui/win32/rollback.c \ + ui/win32/rollback.h \ + ui/win32/roms.c \ + ui/win32/roms.h \ + ui/win32/select_template.h \ + ui/win32/statusbar.c \ + ui/win32/win32display.c \ + ui/win32/win32internals.h \ + ui/win32/win32joystick.c \ + ui/win32/win32joystick.h \ + ui/win32/win32keyboard.c \ + ui/win32/win32mouse.c \ + ui/win32/win32ui.c \ + ui/win32/winsparkle.c \ + ui/win32/winsparkle.h + +ui_win32_rc_files = \ + ui/win32/about.rc \ + ui/win32/binary.rc \ + ui/win32/browse.rc \ + ui/win32/debugger.rc \ + ui/win32/memorybrowser.rc \ + ui/win32/menu_data.rc \ + ui/win32/options.rc \ + ui/win32/picture.rc \ + ui/win32/pokefinder.rc \ + ui/win32/pokemem.rc \ + ui/win32/rollback.rc \ + ui/win32/roms.rc \ + ui/win32/select_template.rc \ + ui/win32/statusbar.rc \ + ui/win32/win32joystick.rc + +ui_win32_built = \ + ui/win32/keysyms.c \ + ui/win32/menu_data.c \ + ui/win32/menu_data.h \ + ui/win32/menu_data.rc \ + ui/win32/options_internals.h \ + ui/win32/options.c \ + ui/win32/options.rc + +ui_xlib_files = \ + ui/xlib/keysyms.c \ + ui/xlib/xdisplay.c \ + ui/xlib/xdisplay.h \ + ui/xlib/xerror.c \ + ui/xlib/xjoystick.c \ + ui/xlib/xkeyboard.c \ + ui/xlib/xkeyboard.h \ + ui/xlib/xui.c \ + ui/xlib/xui.h + +ui_xlib_built = \ + ui/xlib/keysyms.c \ + ui/xlib/xpixmaps.c + +unittests_displaytest_SOURCES = unittests/displaytest.c display.c +unittests_displaytest_LDADD = $(LIBSPECTRUM_LIBS) $(GLIB_LIBS) +unittests_displaytest_CPPFLAGS = $(AM_CPPFLAGS) -DDISPLAYTEST +unittests_sdl2displaytest_SOURCES = \ + unittests/sdl2displaytest.c \ + ui/sdl2/sdl2_display_internal.c + +unittests_sdl2displaytest_LDADD = $(LIBSPECTRUM_LIBS) +unittests_sdl2displaytest_CPPFLAGS = $(AM_CPPFLAGS) +unittests_sdl2scalerstatetest_SOURCES = \ + unittests/sdl2scalerstatetest.c \ + ui/sdl2/sdl2_scaler_state.c + +unittests_sdl2scalerstatetest_LDADD = $(LIBSPECTRUM_LIBS) +unittests_sdl2scalerstatetest_CPPFLAGS = $(AM_CPPFLAGS) +unittests_sdl2joysticktest_SOURCES = \ + unittests/sdl2joysticktest.c \ + ui/sdl2/sdl2_joystick_internal.c + +unittests_sdl2joysticktest_LDADD = $(LIBSPECTRUM_LIBS) +unittests_sdl2joysticktest_CPPFLAGS = $(AM_CPPFLAGS) +unittests_sdl2mousetest_SOURCES = \ + unittests/sdl2mousetest.c \ + ui/sdl2/sdl2_mouse_internal.c + +unittests_sdl2mousetest_LDADD = $(LIBSPECTRUM_LIBS) +unittests_sdl2mousetest_CPPFLAGS = $(AM_CPPFLAGS) +unittests_palcompositetest_SOURCES = \ + unittests/palcompositetest.c \ + ui/scaler/snes_ntsc.c + +unittests_palcompositetest_LDADD = $(LIBSPECTRUM_LIBS) \ + ui/scaler/scalers16.o ui/scaler/scalers32.o + +unittests_palcompositetest_CPPFLAGS = $(AM_CPPFLAGS) +unittests_scalerexpandtest_SOURCES = \ + unittests/scalerexpandtest.c \ + ui/scaler/scaler.c + +unittests_scalerexpandtest_LDADD = $(LIBSPECTRUM_LIBS) \ + ui/scaler/scalers16.o ui/scaler/scalers32.o ui/scaler/snes_ntsc.o + +unittests_scalerexpandtest_CPPFLAGS = $(AM_CPPFLAGS) +z80_coretest_SOURCES = z80/coretest.c z80/z80.c +z80_coretest_LDADD = z80/z80_coretest.o $(GLIB_LIBS) $(LIBSPECTRUM_LIBS) +z80_coretest_CPPFLAGS = $(GLIB_CFLAGS) $(LIBSPECTRUM_CFLAGS) -DCORETEST +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .l .lo .o .obj .y +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/compat/Makefile.am $(srcdir)/data/Makefile.am $(srcdir)/data/win32/distribution.mk $(srcdir)/debugger/Makefile.am $(srcdir)/hacking/Makefile.am $(srcdir)/infrastructure/Makefile.am $(srcdir)/lib/Makefile.am $(srcdir)/machines/Makefile.am $(srcdir)/man/Makefile.am $(srcdir)/peripherals/Makefile.am $(srcdir)/perl/Makefile.am $(srcdir)/pokefinder/Makefile.am $(srcdir)/roms/Makefile.am $(srcdir)/sound/Makefile.am $(srcdir)/timer/Makefile.am $(srcdir)/ui/Makefile.am $(srcdir)/ui/fb/Makefile.am $(srcdir)/ui/gtk3/Makefile.am $(srcdir)/ui/null/Makefile.am $(srcdir)/ui/scaler/Makefile.am $(srcdir)/ui/sdl/Makefile.am $(srcdir)/ui/sdl2/Makefile.am $(srcdir)/ui/widget/Makefile.am $(srcdir)/ui/wii/Makefile.am $(srcdir)/ui/win32/Makefile.am $(srcdir)/ui/xlib/Makefile.am $(srcdir)/unittests/Makefile.am $(srcdir)/z80/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ + esac; +$(srcdir)/compat/Makefile.am $(srcdir)/data/Makefile.am $(srcdir)/data/win32/distribution.mk $(srcdir)/debugger/Makefile.am $(srcdir)/hacking/Makefile.am $(srcdir)/infrastructure/Makefile.am $(srcdir)/lib/Makefile.am $(srcdir)/machines/Makefile.am $(srcdir)/man/Makefile.am $(srcdir)/peripherals/Makefile.am $(srcdir)/perl/Makefile.am $(srcdir)/pokefinder/Makefile.am $(srcdir)/roms/Makefile.am $(srcdir)/sound/Makefile.am $(srcdir)/timer/Makefile.am $(srcdir)/ui/Makefile.am $(srcdir)/ui/fb/Makefile.am $(srcdir)/ui/gtk3/Makefile.am $(srcdir)/ui/null/Makefile.am $(srcdir)/ui/scaler/Makefile.am $(srcdir)/ui/sdl/Makefile.am $(srcdir)/ui/sdl2/Makefile.am $(srcdir)/ui/widget/Makefile.am $(srcdir)/ui/wii/Makefile.am $(srcdir)/ui/win32/Makefile.am $(srcdir)/ui/xlib/Makefile.am $(srcdir)/unittests/Makefile.am $(srcdir)/z80/Makefile.am $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +data/win32/fuse.manifest: $(top_builddir)/config.status $(top_srcdir)/data/win32/fuse.manifest.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +data/win32/installer.nsi: $(top_builddir)/config.status $(top_srcdir)/data/win32/installer.nsi.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +compat/$(am__dirstamp): + @$(MKDIR_P) compat + @: > compat/$(am__dirstamp) +compat/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) compat/$(DEPDIR) + @: > compat/$(DEPDIR)/$(am__dirstamp) +compat/dirname.$(OBJEXT): compat/$(am__dirstamp) \ + compat/$(DEPDIR)/$(am__dirstamp) +compat/getopt.$(OBJEXT): compat/$(am__dirstamp) \ + compat/$(DEPDIR)/$(am__dirstamp) +compat/getopt1.$(OBJEXT): compat/$(am__dirstamp) \ + compat/$(DEPDIR)/$(am__dirstamp) +compat/unix/$(am__dirstamp): + @$(MKDIR_P) compat/unix + @: > compat/unix/$(am__dirstamp) +compat/unix/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) compat/unix/$(DEPDIR) + @: > compat/unix/$(DEPDIR)/$(am__dirstamp) +compat/unix/dir.$(OBJEXT): compat/unix/$(am__dirstamp) \ + compat/unix/$(DEPDIR)/$(am__dirstamp) +compat/unix/file.$(OBJEXT): compat/unix/$(am__dirstamp) \ + compat/unix/$(DEPDIR)/$(am__dirstamp) +compat/amiga/$(am__dirstamp): + @$(MKDIR_P) compat/amiga + @: > compat/amiga/$(am__dirstamp) +compat/amiga/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) compat/amiga/$(DEPDIR) + @: > compat/amiga/$(DEPDIR)/$(am__dirstamp) +compat/amiga/osname.$(OBJEXT): compat/amiga/$(am__dirstamp) \ + compat/amiga/$(DEPDIR)/$(am__dirstamp) +compat/amiga/paths.$(OBJEXT): compat/amiga/$(am__dirstamp) \ + compat/amiga/$(DEPDIR)/$(am__dirstamp) +compat/unix/timer.$(OBJEXT): compat/unix/$(am__dirstamp) \ + compat/unix/$(DEPDIR)/$(am__dirstamp) +compat/unix/osname.$(OBJEXT): compat/unix/$(am__dirstamp) \ + compat/unix/$(DEPDIR)/$(am__dirstamp) +compat/linux/$(am__dirstamp): + @$(MKDIR_P) compat/linux + @: > compat/linux/$(am__dirstamp) +compat/linux/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) compat/linux/$(DEPDIR) + @: > compat/linux/$(DEPDIR)/$(am__dirstamp) +compat/linux/relative_paths.$(OBJEXT): compat/linux/$(am__dirstamp) \ + compat/linux/$(DEPDIR)/$(am__dirstamp) +compat/unix/paths.$(OBJEXT): compat/unix/$(am__dirstamp) \ + compat/unix/$(DEPDIR)/$(am__dirstamp) +compat/unix/socket.$(OBJEXT): compat/unix/$(am__dirstamp) \ + compat/unix/$(DEPDIR)/$(am__dirstamp) +compat/morphos/$(am__dirstamp): + @$(MKDIR_P) compat/morphos + @: > compat/morphos/$(am__dirstamp) +compat/morphos/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) compat/morphos/$(DEPDIR) + @: > compat/morphos/$(DEPDIR)/$(am__dirstamp) +compat/morphos/osname.$(OBJEXT): compat/morphos/$(am__dirstamp) \ + compat/morphos/$(DEPDIR)/$(am__dirstamp) +compat/unix/relative_paths.$(OBJEXT): compat/unix/$(am__dirstamp) \ + compat/unix/$(DEPDIR)/$(am__dirstamp) +compat/wii/$(am__dirstamp): + @$(MKDIR_P) compat/wii + @: > compat/wii/$(am__dirstamp) +compat/wii/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) compat/wii/$(DEPDIR) + @: > compat/wii/$(DEPDIR)/$(am__dirstamp) +compat/wii/osname.$(OBJEXT): compat/wii/$(am__dirstamp) \ + compat/wii/$(DEPDIR)/$(am__dirstamp) +compat/wii/paths.$(OBJEXT): compat/wii/$(am__dirstamp) \ + compat/wii/$(DEPDIR)/$(am__dirstamp) +compat/wii/timer.$(OBJEXT): compat/wii/$(am__dirstamp) \ + compat/wii/$(DEPDIR)/$(am__dirstamp) +compat/win32/$(am__dirstamp): + @$(MKDIR_P) compat/win32 + @: > compat/win32/$(am__dirstamp) +compat/win32/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) compat/win32/$(DEPDIR) + @: > compat/win32/$(DEPDIR)/$(am__dirstamp) +compat/win32/osname.$(OBJEXT): compat/win32/$(am__dirstamp) \ + compat/win32/$(DEPDIR)/$(am__dirstamp) +compat/win32/paths.$(OBJEXT): compat/win32/$(am__dirstamp) \ + compat/win32/$(DEPDIR)/$(am__dirstamp) +compat/win32/timer.$(OBJEXT): compat/win32/$(am__dirstamp) \ + compat/win32/$(DEPDIR)/$(am__dirstamp) +compat/win32/socket.$(OBJEXT): compat/win32/$(am__dirstamp) \ + compat/win32/$(DEPDIR)/$(am__dirstamp) +compat/unix/tuntap.$(OBJEXT): compat/unix/$(am__dirstamp) \ + compat/unix/$(DEPDIR)/$(am__dirstamp) +debugger/$(am__dirstamp): + @$(MKDIR_P) debugger + @: > debugger/$(am__dirstamp) +debugger/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) debugger/$(DEPDIR) + @: > debugger/$(DEPDIR)/$(am__dirstamp) +debugger/breakpoint.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/command.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/commandl.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/commandy.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/debugger.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/disassemble.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/event.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/expression.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/gdbserver.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/gdbserver_remote_commands.$(OBJEXT): \ + debugger/$(am__dirstamp) debugger/$(DEPDIR)/$(am__dirstamp) +debugger/gdbserver_utils.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/system_variable.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/packets.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/variable.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/vfile.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +debugger/vfile_ext.$(OBJEXT): debugger/$(am__dirstamp) \ + debugger/$(DEPDIR)/$(am__dirstamp) +infrastructure/$(am__dirstamp): + @$(MKDIR_P) infrastructure + @: > infrastructure/$(am__dirstamp) +infrastructure/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) infrastructure/$(DEPDIR) + @: > infrastructure/$(DEPDIR)/$(am__dirstamp) +infrastructure/startup_manager.$(OBJEXT): \ + infrastructure/$(am__dirstamp) \ + infrastructure/$(DEPDIR)/$(am__dirstamp) +machines/$(am__dirstamp): + @$(MKDIR_P) machines + @: > machines/$(am__dirstamp) +machines/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) machines/$(DEPDIR) + @: > machines/$(DEPDIR)/$(am__dirstamp) +machines/machines_periph.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/pentagon.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/pentagon512.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/pentagon1024.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/scorpion.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/spec128.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/spec16.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/spec48.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/spec48_ntsc.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/specplus2.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/spec_se.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/specplus2a.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/specplus3.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/specplus3e.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/tc2048.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/tc2068.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +machines/ts2068.$(OBJEXT): machines/$(am__dirstamp) \ + machines/$(DEPDIR)/$(am__dirstamp) +peripherals/$(am__dirstamp): + @$(MKDIR_P) peripherals + @: > peripherals/$(am__dirstamp) +peripherals/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) peripherals/$(DEPDIR) + @: > peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/dck.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/if1.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/if2.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/joystick.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/kempmouse.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/multiface.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/printer.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/scld.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/speccyboot.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/ula.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/usource.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/ttx2000s.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/sound/$(am__dirstamp): + @$(MKDIR_P) peripherals/sound + @: > peripherals/sound/$(am__dirstamp) +peripherals/sound/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) peripherals/sound/$(DEPDIR) + @: > peripherals/sound/$(DEPDIR)/$(am__dirstamp) +peripherals/sound/ay.$(OBJEXT): peripherals/sound/$(am__dirstamp) \ + peripherals/sound/$(DEPDIR)/$(am__dirstamp) +peripherals/sound/covox.$(OBJEXT): peripherals/sound/$(am__dirstamp) \ + peripherals/sound/$(DEPDIR)/$(am__dirstamp) +peripherals/sound/fuller.$(OBJEXT): peripherals/sound/$(am__dirstamp) \ + peripherals/sound/$(DEPDIR)/$(am__dirstamp) +peripherals/sound/melodik.$(OBJEXT): \ + peripherals/sound/$(am__dirstamp) \ + peripherals/sound/$(DEPDIR)/$(am__dirstamp) +peripherals/sound/sp0256.$(OBJEXT): peripherals/sound/$(am__dirstamp) \ + peripherals/sound/$(DEPDIR)/$(am__dirstamp) +peripherals/sound/specdrum.$(OBJEXT): \ + peripherals/sound/$(am__dirstamp) \ + peripherals/sound/$(DEPDIR)/$(am__dirstamp) +peripherals/sound/uspeech.$(OBJEXT): \ + peripherals/sound/$(am__dirstamp) \ + peripherals/sound/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/$(am__dirstamp): + @$(MKDIR_P) peripherals/disk + @: > peripherals/disk/$(am__dirstamp) +peripherals/disk/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) peripherals/disk/$(DEPDIR) + @: > peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/beta.$(OBJEXT): peripherals/disk/$(am__dirstamp) \ + peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/crc.$(OBJEXT): peripherals/disk/$(am__dirstamp) \ + peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/didaktik.$(OBJEXT): peripherals/disk/$(am__dirstamp) \ + peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/disciple.$(OBJEXT): peripherals/disk/$(am__dirstamp) \ + peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/disk.$(OBJEXT): peripherals/disk/$(am__dirstamp) \ + peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/fdd.$(OBJEXT): peripherals/disk/$(am__dirstamp) \ + peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/opus.$(OBJEXT): peripherals/disk/$(am__dirstamp) \ + peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/plusd.$(OBJEXT): peripherals/disk/$(am__dirstamp) \ + peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/trdos.$(OBJEXT): peripherals/disk/$(am__dirstamp) \ + peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/upd_fdc.$(OBJEXT): peripherals/disk/$(am__dirstamp) \ + peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/disk/wd_fdc.$(OBJEXT): peripherals/disk/$(am__dirstamp) \ + peripherals/disk/$(DEPDIR)/$(am__dirstamp) +peripherals/ide/$(am__dirstamp): + @$(MKDIR_P) peripherals/ide + @: > peripherals/ide/$(am__dirstamp) +peripherals/ide/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) peripherals/ide/$(DEPDIR) + @: > peripherals/ide/$(DEPDIR)/$(am__dirstamp) +peripherals/ide/divide.$(OBJEXT): peripherals/ide/$(am__dirstamp) \ + peripherals/ide/$(DEPDIR)/$(am__dirstamp) +peripherals/ide/divmmc.$(OBJEXT): peripherals/ide/$(am__dirstamp) \ + peripherals/ide/$(DEPDIR)/$(am__dirstamp) +peripherals/ide/divxxx.$(OBJEXT): peripherals/ide/$(am__dirstamp) \ + peripherals/ide/$(DEPDIR)/$(am__dirstamp) +peripherals/ide/ide.$(OBJEXT): peripherals/ide/$(am__dirstamp) \ + peripherals/ide/$(DEPDIR)/$(am__dirstamp) +peripherals/ide/simpleide.$(OBJEXT): peripherals/ide/$(am__dirstamp) \ + peripherals/ide/$(DEPDIR)/$(am__dirstamp) +peripherals/ide/zxatasp.$(OBJEXT): peripherals/ide/$(am__dirstamp) \ + peripherals/ide/$(DEPDIR)/$(am__dirstamp) +peripherals/ide/zxcf.$(OBJEXT): peripherals/ide/$(am__dirstamp) \ + peripherals/ide/$(DEPDIR)/$(am__dirstamp) +peripherals/ide/zxmmc.$(OBJEXT): peripherals/ide/$(am__dirstamp) \ + peripherals/ide/$(DEPDIR)/$(am__dirstamp) +peripherals/spectranet.$(OBJEXT): peripherals/$(am__dirstamp) \ + peripherals/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/$(am__dirstamp): + @$(MKDIR_P) peripherals/nic + @: > peripherals/nic/$(am__dirstamp) +peripherals/nic/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) peripherals/nic/$(DEPDIR) + @: > peripherals/nic/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/enc28j60.$(OBJEXT): peripherals/nic/$(am__dirstamp) \ + peripherals/nic/$(DEPDIR)/$(am__dirstamp) +peripherals/flash/$(am__dirstamp): + @$(MKDIR_P) peripherals/flash + @: > peripherals/flash/$(am__dirstamp) +peripherals/flash/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) peripherals/flash/$(DEPDIR) + @: > peripherals/flash/$(DEPDIR)/$(am__dirstamp) +peripherals/flash/am29f010.$(OBJEXT): \ + peripherals/flash/$(am__dirstamp) \ + peripherals/flash/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/w5100.$(OBJEXT): peripherals/nic/$(am__dirstamp) \ + peripherals/nic/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/w5100_socket.$(OBJEXT): \ + peripherals/nic/$(am__dirstamp) \ + peripherals/nic/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/dns_resolver.$(OBJEXT): \ + peripherals/nic/$(am__dirstamp) \ + peripherals/nic/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/dns_processor.$(OBJEXT): \ + peripherals/nic/$(am__dirstamp) \ + peripherals/nic/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/$(am__dirstamp): + @$(MKDIR_P) peripherals/nic/engines + @: > peripherals/nic/engines/$(am__dirstamp) +peripherals/nic/engines/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) peripherals/nic/engines/$(DEPDIR) + @: > peripherals/nic/engines/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/engine_argv.$(OBJEXT): \ + peripherals/nic/engines/$(am__dirstamp) \ + peripherals/nic/engines/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/engine_fs.$(OBJEXT): \ + peripherals/nic/engines/$(am__dirstamp) \ + peripherals/nic/engines/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/engine_utf8.$(OBJEXT): \ + peripherals/nic/engines/$(am__dirstamp) \ + peripherals/nic/engines/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/json.$(OBJEXT): \ + peripherals/nic/engines/$(am__dirstamp) \ + peripherals/nic/engines/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/xpath.$(OBJEXT): \ + peripherals/nic/engines/$(am__dirstamp) \ + peripherals/nic/engines/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/jsonpath/$(am__dirstamp): + @$(MKDIR_P) peripherals/nic/engines/jsonpath + @: > peripherals/nic/engines/jsonpath/$(am__dirstamp) +peripherals/nic/engines/jsonpath/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) peripherals/nic/engines/jsonpath/$(DEPDIR) + @: > peripherals/nic/engines/jsonpath/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/jsonpath/ast.$(OBJEXT): \ + peripherals/nic/engines/jsonpath/$(am__dirstamp) \ + peripherals/nic/engines/jsonpath/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/jsonpath/lexer.$(OBJEXT): \ + peripherals/nic/engines/jsonpath/$(am__dirstamp) \ + peripherals/nic/engines/jsonpath/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/jsonpath/matcher.$(OBJEXT): \ + peripherals/nic/engines/jsonpath/$(am__dirstamp) \ + peripherals/nic/engines/jsonpath/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/jsonpath/parser.$(OBJEXT): \ + peripherals/nic/engines/jsonpath/$(am__dirstamp) \ + peripherals/nic/engines/jsonpath/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/engines/parson.$(OBJEXT): \ + peripherals/nic/engines/$(am__dirstamp) \ + peripherals/nic/engines/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/spectranext_controller.$(OBJEXT): \ + peripherals/nic/$(am__dirstamp) \ + peripherals/nic/$(DEPDIR)/$(am__dirstamp) +peripherals/nic/spectranext_stdout.$(OBJEXT): \ + peripherals/nic/$(am__dirstamp) \ + peripherals/nic/$(DEPDIR)/$(am__dirstamp) +peripherals/fs/$(am__dirstamp): + @$(MKDIR_P) peripherals/fs + @: > peripherals/fs/$(am__dirstamp) +peripherals/fs/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) peripherals/fs/$(DEPDIR) + @: > peripherals/fs/$(DEPDIR)/$(am__dirstamp) +peripherals/fs/xfs.$(OBJEXT): peripherals/fs/$(am__dirstamp) \ + peripherals/fs/$(DEPDIR)/$(am__dirstamp) +peripherals/fs/xfs_compat.$(OBJEXT): peripherals/fs/$(am__dirstamp) \ + peripherals/fs/$(DEPDIR)/$(am__dirstamp) +peripherals/fs/xfs_worker.$(OBJEXT): peripherals/fs/$(am__dirstamp) \ + peripherals/fs/$(DEPDIR)/$(am__dirstamp) +peripherals/fs/xfs_fs.$(OBJEXT): peripherals/fs/$(am__dirstamp) \ + peripherals/fs/$(DEPDIR)/$(am__dirstamp) +peripherals/fs/xfs_overlay.$(OBJEXT): peripherals/fs/$(am__dirstamp) \ + peripherals/fs/$(DEPDIR)/$(am__dirstamp) +peripherals/fs/xfs_romfs.$(OBJEXT): peripherals/fs/$(am__dirstamp) \ + peripherals/fs/$(DEPDIR)/$(am__dirstamp) +peripherals/fs/ramfs.$(OBJEXT): peripherals/fs/$(am__dirstamp) \ + peripherals/fs/$(DEPDIR)/$(am__dirstamp) +peripherals/fs/xfs_https.$(OBJEXT): peripherals/fs/$(am__dirstamp) \ + peripherals/fs/$(DEPDIR)/$(am__dirstamp) +peripherals/fs/xfs_https_compat.$(OBJEXT): \ + peripherals/fs/$(am__dirstamp) \ + peripherals/fs/$(DEPDIR)/$(am__dirstamp) +peripherals/http/$(am__dirstamp): + @$(MKDIR_P) peripherals/http + @: > peripherals/http/$(am__dirstamp) +peripherals/http/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) peripherals/http/$(DEPDIR) + @: > peripherals/http/$(DEPDIR)/$(am__dirstamp) +peripherals/http/httpc.$(OBJEXT): peripherals/http/$(am__dirstamp) \ + peripherals/http/$(DEPDIR)/$(am__dirstamp) +peripherals/http/http_sck.$(OBJEXT): peripherals/http/$(am__dirstamp) \ + peripherals/http/$(DEPDIR)/$(am__dirstamp) +peripherals/security/$(am__dirstamp): + @$(MKDIR_P) peripherals/security + @: > peripherals/security/$(am__dirstamp) +peripherals/security/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) peripherals/security/$(DEPDIR) + @: > peripherals/security/$(DEPDIR)/$(am__dirstamp) +peripherals/security/tls.$(OBJEXT): \ + peripherals/security/$(am__dirstamp) \ + peripherals/security/$(DEPDIR)/$(am__dirstamp) +peripherals/security/ssh.$(OBJEXT): \ + peripherals/security/$(am__dirstamp) \ + peripherals/security/$(DEPDIR)/$(am__dirstamp) +pokefinder/$(am__dirstamp): + @$(MKDIR_P) pokefinder + @: > pokefinder/$(am__dirstamp) +pokefinder/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) pokefinder/$(DEPDIR) + @: > pokefinder/$(DEPDIR)/$(am__dirstamp) +pokefinder/pokefinder.$(OBJEXT): pokefinder/$(am__dirstamp) \ + pokefinder/$(DEPDIR)/$(am__dirstamp) +pokefinder/pokemem.$(OBJEXT): pokefinder/$(am__dirstamp) \ + pokefinder/$(DEPDIR)/$(am__dirstamp) +sound/$(am__dirstamp): + @$(MKDIR_P) sound + @: > sound/$(am__dirstamp) +sound/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) sound/$(DEPDIR) + @: > sound/$(DEPDIR)/$(am__dirstamp) +sound/blipbuffer.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +timer/$(am__dirstamp): + @$(MKDIR_P) timer + @: > timer/$(am__dirstamp) +timer/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) timer/$(DEPDIR) + @: > timer/$(DEPDIR)/$(am__dirstamp) +timer/timer.$(OBJEXT): timer/$(am__dirstamp) \ + timer/$(DEPDIR)/$(am__dirstamp) +ui/fb/$(am__dirstamp): + @$(MKDIR_P) ui/fb + @: > ui/fb/$(am__dirstamp) +ui/fb/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ui/fb/$(DEPDIR) + @: > ui/fb/$(DEPDIR)/$(am__dirstamp) +ui/fb/fbdisplay.$(OBJEXT): ui/fb/$(am__dirstamp) \ + ui/fb/$(DEPDIR)/$(am__dirstamp) +ui/fb/fbjoystick.$(OBJEXT): ui/fb/$(am__dirstamp) \ + ui/fb/$(DEPDIR)/$(am__dirstamp) +ui/fb/fbkeyboard.$(OBJEXT): ui/fb/$(am__dirstamp) \ + ui/fb/$(DEPDIR)/$(am__dirstamp) +ui/fb/fbmouse.$(OBJEXT): ui/fb/$(am__dirstamp) \ + ui/fb/$(DEPDIR)/$(am__dirstamp) +ui/fb/fbui.$(OBJEXT): ui/fb/$(am__dirstamp) \ + ui/fb/$(DEPDIR)/$(am__dirstamp) +ui/fb/keysyms.$(OBJEXT): ui/fb/$(am__dirstamp) \ + ui/fb/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/$(am__dirstamp): + @$(MKDIR_P) ui/gtk3 + @: > ui/gtk3/$(am__dirstamp) +ui/gtk3/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ui/gtk3/$(DEPDIR) + @: > ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/binary.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/browse.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/confirm.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/debugger.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/fileselector.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/filter_options.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/gtkdisplay.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/gtkjoystick.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/gtkkeyboard.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/gtkmouse.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/gtkui.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/keysyms.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/menu_data.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/options.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/picture.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/pokefinder.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/pokemem.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/resources.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/rollback.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/roms.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/statusbar.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/stock.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/gtk3/memory.$(OBJEXT): ui/gtk3/$(am__dirstamp) \ + ui/gtk3/$(DEPDIR)/$(am__dirstamp) +ui/null/$(am__dirstamp): + @$(MKDIR_P) ui/null + @: > ui/null/$(am__dirstamp) +ui/null/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ui/null/$(DEPDIR) + @: > ui/null/$(DEPDIR)/$(am__dirstamp) +ui/null/null_ui.$(OBJEXT): ui/null/$(am__dirstamp) \ + ui/null/$(DEPDIR)/$(am__dirstamp) +ui/null/options.$(OBJEXT): ui/null/$(am__dirstamp) \ + ui/null/$(DEPDIR)/$(am__dirstamp) +ui/scaler/$(am__dirstamp): + @$(MKDIR_P) ui/scaler + @: > ui/scaler/$(am__dirstamp) +ui/scaler/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ui/scaler/$(DEPDIR) + @: > ui/scaler/$(DEPDIR)/$(am__dirstamp) +ui/scaler/scaler.$(OBJEXT): ui/scaler/$(am__dirstamp) \ + ui/scaler/$(DEPDIR)/$(am__dirstamp) +ui/scaler/snes_ntsc.$(OBJEXT): ui/scaler/$(am__dirstamp) \ + ui/scaler/$(DEPDIR)/$(am__dirstamp) +ui/sdl/$(am__dirstamp): + @$(MKDIR_P) ui/sdl + @: > ui/sdl/$(am__dirstamp) +ui/sdl/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ui/sdl/$(DEPDIR) + @: > ui/sdl/$(DEPDIR)/$(am__dirstamp) +ui/sdl/sdldisplay.$(OBJEXT): ui/sdl/$(am__dirstamp) \ + ui/sdl/$(DEPDIR)/$(am__dirstamp) +ui/sdl/sdljoystick.$(OBJEXT): ui/sdl/$(am__dirstamp) \ + ui/sdl/$(DEPDIR)/$(am__dirstamp) +ui/sdl/sdlkeyboard.$(OBJEXT): ui/sdl/$(am__dirstamp) \ + ui/sdl/$(DEPDIR)/$(am__dirstamp) +ui/sdl/sdlui.$(OBJEXT): ui/sdl/$(am__dirstamp) \ + ui/sdl/$(DEPDIR)/$(am__dirstamp) +ui/sdl/keysyms.$(OBJEXT): ui/sdl/$(am__dirstamp) \ + ui/sdl/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/$(am__dirstamp): + @$(MKDIR_P) ui/sdl2 + @: > ui/sdl2/$(am__dirstamp) +ui/sdl2/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ui/sdl2/$(DEPDIR) + @: > ui/sdl2/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/sdl2_display_internal.$(OBJEXT): ui/sdl2/$(am__dirstamp) \ + ui/sdl2/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/sdl2_scaler_state.$(OBJEXT): ui/sdl2/$(am__dirstamp) \ + ui/sdl2/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/sdl2_display.$(OBJEXT): ui/sdl2/$(am__dirstamp) \ + ui/sdl2/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/sdl2_joystick_internal.$(OBJEXT): ui/sdl2/$(am__dirstamp) \ + ui/sdl2/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/sdl2_joystick.$(OBJEXT): ui/sdl2/$(am__dirstamp) \ + ui/sdl2/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/sdl2_keyboard.$(OBJEXT): ui/sdl2/$(am__dirstamp) \ + ui/sdl2/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/sdl2_mouse_internal.$(OBJEXT): ui/sdl2/$(am__dirstamp) \ + ui/sdl2/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/sdl2_ui.$(OBJEXT): ui/sdl2/$(am__dirstamp) \ + ui/sdl2/$(DEPDIR)/$(am__dirstamp) +ui/widget/$(am__dirstamp): + @$(MKDIR_P) ui/widget + @: > ui/widget/$(am__dirstamp) +ui/widget/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ui/widget/$(DEPDIR) + @: > ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/about.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/binary.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/browse.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/debugger.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/error.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/filesel.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/memory.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/menu.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/menu_data.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/options.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/picture.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/pokefinder.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/pokemem.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/query.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/roms.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/select.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/text.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/widget/widget.$(OBJEXT): ui/widget/$(am__dirstamp) \ + ui/widget/$(DEPDIR)/$(am__dirstamp) +ui/wii/$(am__dirstamp): + @$(MKDIR_P) ui/wii + @: > ui/wii/$(am__dirstamp) +ui/wii/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ui/wii/$(DEPDIR) + @: > ui/wii/$(DEPDIR)/$(am__dirstamp) +ui/wii/keysyms.$(OBJEXT): ui/wii/$(am__dirstamp) \ + ui/wii/$(DEPDIR)/$(am__dirstamp) +ui/wii/wiidisplay.$(OBJEXT): ui/wii/$(am__dirstamp) \ + ui/wii/$(DEPDIR)/$(am__dirstamp) +ui/wii/wiijoystick.$(OBJEXT): ui/wii/$(am__dirstamp) \ + ui/wii/$(DEPDIR)/$(am__dirstamp) +ui/wii/wiikeyboard.$(OBJEXT): ui/wii/$(am__dirstamp) \ + ui/wii/$(DEPDIR)/$(am__dirstamp) +ui/wii/wiimouse.$(OBJEXT): ui/wii/$(am__dirstamp) \ + ui/wii/$(DEPDIR)/$(am__dirstamp) +ui/wii/wiiui.$(OBJEXT): ui/wii/$(am__dirstamp) \ + ui/wii/$(DEPDIR)/$(am__dirstamp) +ui/win32/$(am__dirstamp): + @$(MKDIR_P) ui/win32 + @: > ui/win32/$(am__dirstamp) +ui/win32/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ui/win32/$(DEPDIR) + @: > ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/about.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/binary.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/browse.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/confirm.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/debugger.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/debuglog.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/fileselector.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/hyperlinks.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/keysyms.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/memorybrowser.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/menu_data.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/options.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/picture.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/pokefinder.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/pokemem.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/rollback.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/roms.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/statusbar.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/win32display.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/win32joystick.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/win32keyboard.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/win32mouse.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/win32ui.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/win32/winsparkle.$(OBJEXT): ui/win32/$(am__dirstamp) \ + ui/win32/$(DEPDIR)/$(am__dirstamp) +ui/xlib/$(am__dirstamp): + @$(MKDIR_P) ui/xlib + @: > ui/xlib/$(am__dirstamp) +ui/xlib/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ui/xlib/$(DEPDIR) + @: > ui/xlib/$(DEPDIR)/$(am__dirstamp) +ui/xlib/keysyms.$(OBJEXT): ui/xlib/$(am__dirstamp) \ + ui/xlib/$(DEPDIR)/$(am__dirstamp) +ui/xlib/xdisplay.$(OBJEXT): ui/xlib/$(am__dirstamp) \ + ui/xlib/$(DEPDIR)/$(am__dirstamp) +ui/xlib/xerror.$(OBJEXT): ui/xlib/$(am__dirstamp) \ + ui/xlib/$(DEPDIR)/$(am__dirstamp) +ui/xlib/xjoystick.$(OBJEXT): ui/xlib/$(am__dirstamp) \ + ui/xlib/$(DEPDIR)/$(am__dirstamp) +ui/xlib/xkeyboard.$(OBJEXT): ui/xlib/$(am__dirstamp) \ + ui/xlib/$(DEPDIR)/$(am__dirstamp) +ui/xlib/xui.$(OBJEXT): ui/xlib/$(am__dirstamp) \ + ui/xlib/$(DEPDIR)/$(am__dirstamp) +unittests/$(am__dirstamp): + @$(MKDIR_P) unittests + @: > unittests/$(am__dirstamp) +unittests/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) unittests/$(DEPDIR) + @: > unittests/$(DEPDIR)/$(am__dirstamp) +unittests/unittests.$(OBJEXT): unittests/$(am__dirstamp) \ + unittests/$(DEPDIR)/$(am__dirstamp) +z80/$(am__dirstamp): + @$(MKDIR_P) z80 + @: > z80/$(am__dirstamp) +z80/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) z80/$(DEPDIR) + @: > z80/$(DEPDIR)/$(am__dirstamp) +z80/z80.$(OBJEXT): z80/$(am__dirstamp) z80/$(DEPDIR)/$(am__dirstamp) +z80/z80_debugger_variables.$(OBJEXT): z80/$(am__dirstamp) \ + z80/$(DEPDIR)/$(am__dirstamp) +z80/z80_ops.$(OBJEXT): z80/$(am__dirstamp) \ + z80/$(DEPDIR)/$(am__dirstamp) +sound/alsasound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/aosound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/coreaudiosound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/dxsound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/hpsound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/nullsound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/osssound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/pulsesound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/sdl2sound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/sdlsound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/sfifo.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/sunsound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/wiisound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +sound/win32sound.$(OBJEXT): sound/$(am__dirstamp) \ + sound/$(DEPDIR)/$(am__dirstamp) +timer/native.$(OBJEXT): timer/$(am__dirstamp) \ + timer/$(DEPDIR)/$(am__dirstamp) +timer/sdl.$(OBJEXT): timer/$(am__dirstamp) \ + timer/$(DEPDIR)/$(am__dirstamp) + +fuse$(EXEEXT): $(fuse_OBJECTS) $(fuse_DEPENDENCIES) $(EXTRA_fuse_DEPENDENCIES) + @rm -f fuse$(EXEEXT) + $(AM_V_CCLD)$(fuse_LINK) $(fuse_OBJECTS) $(fuse_LDADD) $(LIBS) +unittests/displaytest-displaytest.$(OBJEXT): \ + unittests/$(am__dirstamp) unittests/$(DEPDIR)/$(am__dirstamp) + +unittests/displaytest$(EXEEXT): $(unittests_displaytest_OBJECTS) $(unittests_displaytest_DEPENDENCIES) $(EXTRA_unittests_displaytest_DEPENDENCIES) unittests/$(am__dirstamp) + @rm -f unittests/displaytest$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(unittests_displaytest_OBJECTS) $(unittests_displaytest_LDADD) $(LIBS) +unittests/palcompositetest-palcompositetest.$(OBJEXT): \ + unittests/$(am__dirstamp) unittests/$(DEPDIR)/$(am__dirstamp) +ui/scaler/unittests_palcompositetest-snes_ntsc.$(OBJEXT): \ + ui/scaler/$(am__dirstamp) ui/scaler/$(DEPDIR)/$(am__dirstamp) + +unittests/palcompositetest$(EXEEXT): $(unittests_palcompositetest_OBJECTS) $(unittests_palcompositetest_DEPENDENCIES) $(EXTRA_unittests_palcompositetest_DEPENDENCIES) unittests/$(am__dirstamp) + @rm -f unittests/palcompositetest$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(unittests_palcompositetest_OBJECTS) $(unittests_palcompositetest_LDADD) $(LIBS) +unittests/scalerexpandtest-scalerexpandtest.$(OBJEXT): \ + unittests/$(am__dirstamp) unittests/$(DEPDIR)/$(am__dirstamp) +ui/scaler/unittests_scalerexpandtest-scaler.$(OBJEXT): \ + ui/scaler/$(am__dirstamp) ui/scaler/$(DEPDIR)/$(am__dirstamp) + +unittests/scalerexpandtest$(EXEEXT): $(unittests_scalerexpandtest_OBJECTS) $(unittests_scalerexpandtest_DEPENDENCIES) $(EXTRA_unittests_scalerexpandtest_DEPENDENCIES) unittests/$(am__dirstamp) + @rm -f unittests/scalerexpandtest$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(unittests_scalerexpandtest_OBJECTS) $(unittests_scalerexpandtest_LDADD) $(LIBS) +unittests/sdl2displaytest-sdl2displaytest.$(OBJEXT): \ + unittests/$(am__dirstamp) unittests/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.$(OBJEXT): \ + ui/sdl2/$(am__dirstamp) ui/sdl2/$(DEPDIR)/$(am__dirstamp) + +unittests/sdl2displaytest$(EXEEXT): $(unittests_sdl2displaytest_OBJECTS) $(unittests_sdl2displaytest_DEPENDENCIES) $(EXTRA_unittests_sdl2displaytest_DEPENDENCIES) unittests/$(am__dirstamp) + @rm -f unittests/sdl2displaytest$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(unittests_sdl2displaytest_OBJECTS) $(unittests_sdl2displaytest_LDADD) $(LIBS) +unittests/sdl2joysticktest-sdl2joysticktest.$(OBJEXT): \ + unittests/$(am__dirstamp) unittests/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.$(OBJEXT): \ + ui/sdl2/$(am__dirstamp) ui/sdl2/$(DEPDIR)/$(am__dirstamp) + +unittests/sdl2joysticktest$(EXEEXT): $(unittests_sdl2joysticktest_OBJECTS) $(unittests_sdl2joysticktest_DEPENDENCIES) $(EXTRA_unittests_sdl2joysticktest_DEPENDENCIES) unittests/$(am__dirstamp) + @rm -f unittests/sdl2joysticktest$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(unittests_sdl2joysticktest_OBJECTS) $(unittests_sdl2joysticktest_LDADD) $(LIBS) +unittests/sdl2mousetest-sdl2mousetest.$(OBJEXT): \ + unittests/$(am__dirstamp) unittests/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.$(OBJEXT): \ + ui/sdl2/$(am__dirstamp) ui/sdl2/$(DEPDIR)/$(am__dirstamp) + +unittests/sdl2mousetest$(EXEEXT): $(unittests_sdl2mousetest_OBJECTS) $(unittests_sdl2mousetest_DEPENDENCIES) $(EXTRA_unittests_sdl2mousetest_DEPENDENCIES) unittests/$(am__dirstamp) + @rm -f unittests/sdl2mousetest$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(unittests_sdl2mousetest_OBJECTS) $(unittests_sdl2mousetest_LDADD) $(LIBS) +unittests/sdl2scalerstatetest-sdl2scalerstatetest.$(OBJEXT): \ + unittests/$(am__dirstamp) unittests/$(DEPDIR)/$(am__dirstamp) +ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.$(OBJEXT): \ + ui/sdl2/$(am__dirstamp) ui/sdl2/$(DEPDIR)/$(am__dirstamp) + +unittests/sdl2scalerstatetest$(EXEEXT): $(unittests_sdl2scalerstatetest_OBJECTS) $(unittests_sdl2scalerstatetest_DEPENDENCIES) $(EXTRA_unittests_sdl2scalerstatetest_DEPENDENCIES) unittests/$(am__dirstamp) + @rm -f unittests/sdl2scalerstatetest$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(unittests_sdl2scalerstatetest_OBJECTS) $(unittests_sdl2scalerstatetest_LDADD) $(LIBS) +z80/coretest-coretest.$(OBJEXT): z80/$(am__dirstamp) \ + z80/$(DEPDIR)/$(am__dirstamp) +z80/coretest-z80.$(OBJEXT): z80/$(am__dirstamp) \ + z80/$(DEPDIR)/$(am__dirstamp) + +z80/coretest$(EXEEXT): $(z80_coretest_OBJECTS) $(z80_coretest_DEPENDENCIES) $(EXTRA_z80_coretest_DEPENDENCIES) z80/$(am__dirstamp) + @rm -f z80/coretest$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(z80_coretest_OBJECTS) $(z80_coretest_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f compat/*.$(OBJEXT) + -rm -f compat/amiga/*.$(OBJEXT) + -rm -f compat/linux/*.$(OBJEXT) + -rm -f compat/morphos/*.$(OBJEXT) + -rm -f compat/unix/*.$(OBJEXT) + -rm -f compat/wii/*.$(OBJEXT) + -rm -f compat/win32/*.$(OBJEXT) + -rm -f debugger/*.$(OBJEXT) + -rm -f infrastructure/*.$(OBJEXT) + -rm -f machines/*.$(OBJEXT) + -rm -f peripherals/*.$(OBJEXT) + -rm -f peripherals/disk/*.$(OBJEXT) + -rm -f peripherals/flash/*.$(OBJEXT) + -rm -f peripherals/fs/*.$(OBJEXT) + -rm -f peripherals/http/*.$(OBJEXT) + -rm -f peripherals/ide/*.$(OBJEXT) + -rm -f peripherals/nic/*.$(OBJEXT) + -rm -f peripherals/nic/engines/*.$(OBJEXT) + -rm -f peripherals/nic/engines/jsonpath/*.$(OBJEXT) + -rm -f peripherals/security/*.$(OBJEXT) + -rm -f peripherals/sound/*.$(OBJEXT) + -rm -f pokefinder/*.$(OBJEXT) + -rm -f sound/*.$(OBJEXT) + -rm -f timer/*.$(OBJEXT) + -rm -f ui/fb/*.$(OBJEXT) + -rm -f ui/gtk3/*.$(OBJEXT) + -rm -f ui/null/*.$(OBJEXT) + -rm -f ui/scaler/*.$(OBJEXT) + -rm -f ui/sdl/*.$(OBJEXT) + -rm -f ui/sdl2/*.$(OBJEXT) + -rm -f ui/widget/*.$(OBJEXT) + -rm -f ui/wii/*.$(OBJEXT) + -rm -f ui/win32/*.$(OBJEXT) + -rm -f ui/xlib/*.$(OBJEXT) + -rm -f unittests/*.$(OBJEXT) + -rm -f z80/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/display.Po # am--include-marker +include ./$(DEPDIR)/event.Po # am--include-marker +include ./$(DEPDIR)/fuse.Po # am--include-marker +include ./$(DEPDIR)/input.Po # am--include-marker +include ./$(DEPDIR)/keyboard.Po # am--include-marker +include ./$(DEPDIR)/loader.Po # am--include-marker +include ./$(DEPDIR)/machine.Po # am--include-marker +include ./$(DEPDIR)/memory_pages.Po # am--include-marker +include ./$(DEPDIR)/mempool.Po # am--include-marker +include ./$(DEPDIR)/menu.Po # am--include-marker +include ./$(DEPDIR)/module.Po # am--include-marker +include ./$(DEPDIR)/movie.Po # am--include-marker +include ./$(DEPDIR)/periph.Po # am--include-marker +include ./$(DEPDIR)/phantom_typist.Po # am--include-marker +include ./$(DEPDIR)/profile.Po # am--include-marker +include ./$(DEPDIR)/psg.Po # am--include-marker +include ./$(DEPDIR)/rectangle.Po # am--include-marker +include ./$(DEPDIR)/rzx.Po # am--include-marker +include ./$(DEPDIR)/screenshot.Po # am--include-marker +include ./$(DEPDIR)/settings.Po # am--include-marker +include ./$(DEPDIR)/slt.Po # am--include-marker +include ./$(DEPDIR)/snapshot.Po # am--include-marker +include ./$(DEPDIR)/sound.Po # am--include-marker +include ./$(DEPDIR)/spectrum.Po # am--include-marker +include ./$(DEPDIR)/svg.Po # am--include-marker +include ./$(DEPDIR)/tape.Po # am--include-marker +include ./$(DEPDIR)/ui.Po # am--include-marker +include ./$(DEPDIR)/uidisplay.Po # am--include-marker +include ./$(DEPDIR)/uimedia.Po # am--include-marker +include ./$(DEPDIR)/unittests_displaytest-display.Po # am--include-marker +include ./$(DEPDIR)/utils.Po # am--include-marker +include compat/$(DEPDIR)/dirname.Po # am--include-marker +include compat/$(DEPDIR)/getopt.Po # am--include-marker +include compat/$(DEPDIR)/getopt1.Po # am--include-marker +include compat/amiga/$(DEPDIR)/osname.Po # am--include-marker +include compat/amiga/$(DEPDIR)/paths.Po # am--include-marker +include compat/linux/$(DEPDIR)/relative_paths.Po # am--include-marker +include compat/morphos/$(DEPDIR)/osname.Po # am--include-marker +include compat/unix/$(DEPDIR)/dir.Po # am--include-marker +include compat/unix/$(DEPDIR)/file.Po # am--include-marker +include compat/unix/$(DEPDIR)/osname.Po # am--include-marker +include compat/unix/$(DEPDIR)/paths.Po # am--include-marker +include compat/unix/$(DEPDIR)/relative_paths.Po # am--include-marker +include compat/unix/$(DEPDIR)/socket.Po # am--include-marker +include compat/unix/$(DEPDIR)/timer.Po # am--include-marker +include compat/unix/$(DEPDIR)/tuntap.Po # am--include-marker +include compat/wii/$(DEPDIR)/osname.Po # am--include-marker +include compat/wii/$(DEPDIR)/paths.Po # am--include-marker +include compat/wii/$(DEPDIR)/timer.Po # am--include-marker +include compat/win32/$(DEPDIR)/osname.Po # am--include-marker +include compat/win32/$(DEPDIR)/paths.Po # am--include-marker +include compat/win32/$(DEPDIR)/socket.Po # am--include-marker +include compat/win32/$(DEPDIR)/timer.Po # am--include-marker +include debugger/$(DEPDIR)/breakpoint.Po # am--include-marker +include debugger/$(DEPDIR)/command.Po # am--include-marker +include debugger/$(DEPDIR)/commandl.Po # am--include-marker +include debugger/$(DEPDIR)/commandy.Po # am--include-marker +include debugger/$(DEPDIR)/debugger.Po # am--include-marker +include debugger/$(DEPDIR)/disassemble.Po # am--include-marker +include debugger/$(DEPDIR)/event.Po # am--include-marker +include debugger/$(DEPDIR)/expression.Po # am--include-marker +include debugger/$(DEPDIR)/gdbserver.Po # am--include-marker +include debugger/$(DEPDIR)/gdbserver_remote_commands.Po # am--include-marker +include debugger/$(DEPDIR)/gdbserver_utils.Po # am--include-marker +include debugger/$(DEPDIR)/packets.Po # am--include-marker +include debugger/$(DEPDIR)/system_variable.Po # am--include-marker +include debugger/$(DEPDIR)/variable.Po # am--include-marker +include debugger/$(DEPDIR)/vfile.Po # am--include-marker +include debugger/$(DEPDIR)/vfile_ext.Po # am--include-marker +include infrastructure/$(DEPDIR)/startup_manager.Po # am--include-marker +include machines/$(DEPDIR)/machines_periph.Po # am--include-marker +include machines/$(DEPDIR)/pentagon.Po # am--include-marker +include machines/$(DEPDIR)/pentagon1024.Po # am--include-marker +include machines/$(DEPDIR)/pentagon512.Po # am--include-marker +include machines/$(DEPDIR)/scorpion.Po # am--include-marker +include machines/$(DEPDIR)/spec128.Po # am--include-marker +include machines/$(DEPDIR)/spec16.Po # am--include-marker +include machines/$(DEPDIR)/spec48.Po # am--include-marker +include machines/$(DEPDIR)/spec48_ntsc.Po # am--include-marker +include machines/$(DEPDIR)/spec_se.Po # am--include-marker +include machines/$(DEPDIR)/specplus2.Po # am--include-marker +include machines/$(DEPDIR)/specplus2a.Po # am--include-marker +include machines/$(DEPDIR)/specplus3.Po # am--include-marker +include machines/$(DEPDIR)/specplus3e.Po # am--include-marker +include machines/$(DEPDIR)/tc2048.Po # am--include-marker +include machines/$(DEPDIR)/tc2068.Po # am--include-marker +include machines/$(DEPDIR)/ts2068.Po # am--include-marker +include peripherals/$(DEPDIR)/dck.Po # am--include-marker +include peripherals/$(DEPDIR)/if1.Po # am--include-marker +include peripherals/$(DEPDIR)/if2.Po # am--include-marker +include peripherals/$(DEPDIR)/joystick.Po # am--include-marker +include peripherals/$(DEPDIR)/kempmouse.Po # am--include-marker +include peripherals/$(DEPDIR)/multiface.Po # am--include-marker +include peripherals/$(DEPDIR)/printer.Po # am--include-marker +include peripherals/$(DEPDIR)/scld.Po # am--include-marker +include peripherals/$(DEPDIR)/speccyboot.Po # am--include-marker +include peripherals/$(DEPDIR)/spectranet.Po # am--include-marker +include peripherals/$(DEPDIR)/ttx2000s.Po # am--include-marker +include peripherals/$(DEPDIR)/ula.Po # am--include-marker +include peripherals/$(DEPDIR)/usource.Po # am--include-marker +include peripherals/disk/$(DEPDIR)/beta.Po # am--include-marker +include peripherals/disk/$(DEPDIR)/crc.Po # am--include-marker +include peripherals/disk/$(DEPDIR)/didaktik.Po # am--include-marker +include peripherals/disk/$(DEPDIR)/disciple.Po # am--include-marker +include peripherals/disk/$(DEPDIR)/disk.Po # am--include-marker +include peripherals/disk/$(DEPDIR)/fdd.Po # am--include-marker +include peripherals/disk/$(DEPDIR)/opus.Po # am--include-marker +include peripherals/disk/$(DEPDIR)/plusd.Po # am--include-marker +include peripherals/disk/$(DEPDIR)/trdos.Po # am--include-marker +include peripherals/disk/$(DEPDIR)/upd_fdc.Po # am--include-marker +include peripherals/disk/$(DEPDIR)/wd_fdc.Po # am--include-marker +include peripherals/flash/$(DEPDIR)/am29f010.Po # am--include-marker +include peripherals/fs/$(DEPDIR)/ramfs.Po # am--include-marker +include peripherals/fs/$(DEPDIR)/xfs.Po # am--include-marker +include peripherals/fs/$(DEPDIR)/xfs_compat.Po # am--include-marker +include peripherals/fs/$(DEPDIR)/xfs_fs.Po # am--include-marker +include peripherals/fs/$(DEPDIR)/xfs_https.Po # am--include-marker +include peripherals/fs/$(DEPDIR)/xfs_https_compat.Po # am--include-marker +include peripherals/fs/$(DEPDIR)/xfs_overlay.Po # am--include-marker +include peripherals/fs/$(DEPDIR)/xfs_romfs.Po # am--include-marker +include peripherals/fs/$(DEPDIR)/xfs_worker.Po # am--include-marker +include peripherals/http/$(DEPDIR)/http_sck.Po # am--include-marker +include peripherals/http/$(DEPDIR)/httpc.Po # am--include-marker +include peripherals/ide/$(DEPDIR)/divide.Po # am--include-marker +include peripherals/ide/$(DEPDIR)/divmmc.Po # am--include-marker +include peripherals/ide/$(DEPDIR)/divxxx.Po # am--include-marker +include peripherals/ide/$(DEPDIR)/ide.Po # am--include-marker +include peripherals/ide/$(DEPDIR)/simpleide.Po # am--include-marker +include peripherals/ide/$(DEPDIR)/zxatasp.Po # am--include-marker +include peripherals/ide/$(DEPDIR)/zxcf.Po # am--include-marker +include peripherals/ide/$(DEPDIR)/zxmmc.Po # am--include-marker +include peripherals/nic/$(DEPDIR)/dns_processor.Po # am--include-marker +include peripherals/nic/$(DEPDIR)/dns_resolver.Po # am--include-marker +include peripherals/nic/$(DEPDIR)/enc28j60.Po # am--include-marker +include peripherals/nic/$(DEPDIR)/spectranext_controller.Po # am--include-marker +include peripherals/nic/$(DEPDIR)/spectranext_stdout.Po # am--include-marker +include peripherals/nic/$(DEPDIR)/w5100.Po # am--include-marker +include peripherals/nic/$(DEPDIR)/w5100_socket.Po # am--include-marker +include peripherals/nic/engines/$(DEPDIR)/engine_argv.Po # am--include-marker +include peripherals/nic/engines/$(DEPDIR)/engine_fs.Po # am--include-marker +include peripherals/nic/engines/$(DEPDIR)/engine_utf8.Po # am--include-marker +include peripherals/nic/engines/$(DEPDIR)/json.Po # am--include-marker +include peripherals/nic/engines/$(DEPDIR)/parson.Po # am--include-marker +include peripherals/nic/engines/$(DEPDIR)/xpath.Po # am--include-marker +include peripherals/nic/engines/jsonpath/$(DEPDIR)/ast.Po # am--include-marker +include peripherals/nic/engines/jsonpath/$(DEPDIR)/lexer.Po # am--include-marker +include peripherals/nic/engines/jsonpath/$(DEPDIR)/matcher.Po # am--include-marker +include peripherals/nic/engines/jsonpath/$(DEPDIR)/parser.Po # am--include-marker +include peripherals/security/$(DEPDIR)/ssh.Po # am--include-marker +include peripherals/security/$(DEPDIR)/tls.Po # am--include-marker +include peripherals/sound/$(DEPDIR)/ay.Po # am--include-marker +include peripherals/sound/$(DEPDIR)/covox.Po # am--include-marker +include peripherals/sound/$(DEPDIR)/fuller.Po # am--include-marker +include peripherals/sound/$(DEPDIR)/melodik.Po # am--include-marker +include peripherals/sound/$(DEPDIR)/sp0256.Po # am--include-marker +include peripherals/sound/$(DEPDIR)/specdrum.Po # am--include-marker +include peripherals/sound/$(DEPDIR)/uspeech.Po # am--include-marker +include pokefinder/$(DEPDIR)/pokefinder.Po # am--include-marker +include pokefinder/$(DEPDIR)/pokemem.Po # am--include-marker +include sound/$(DEPDIR)/alsasound.Po # am--include-marker +include sound/$(DEPDIR)/aosound.Po # am--include-marker +include sound/$(DEPDIR)/blipbuffer.Po # am--include-marker +include sound/$(DEPDIR)/coreaudiosound.Po # am--include-marker +include sound/$(DEPDIR)/dxsound.Po # am--include-marker +include sound/$(DEPDIR)/hpsound.Po # am--include-marker +include sound/$(DEPDIR)/nullsound.Po # am--include-marker +include sound/$(DEPDIR)/osssound.Po # am--include-marker +include sound/$(DEPDIR)/pulsesound.Po # am--include-marker +include sound/$(DEPDIR)/sdl2sound.Po # am--include-marker +include sound/$(DEPDIR)/sdlsound.Po # am--include-marker +include sound/$(DEPDIR)/sfifo.Po # am--include-marker +include sound/$(DEPDIR)/sunsound.Po # am--include-marker +include sound/$(DEPDIR)/wiisound.Po # am--include-marker +include sound/$(DEPDIR)/win32sound.Po # am--include-marker +include timer/$(DEPDIR)/native.Po # am--include-marker +include timer/$(DEPDIR)/sdl.Po # am--include-marker +include timer/$(DEPDIR)/timer.Po # am--include-marker +include ui/fb/$(DEPDIR)/fbdisplay.Po # am--include-marker +include ui/fb/$(DEPDIR)/fbjoystick.Po # am--include-marker +include ui/fb/$(DEPDIR)/fbkeyboard.Po # am--include-marker +include ui/fb/$(DEPDIR)/fbmouse.Po # am--include-marker +include ui/fb/$(DEPDIR)/fbui.Po # am--include-marker +include ui/fb/$(DEPDIR)/keysyms.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/binary.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/browse.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/confirm.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/debugger.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/fileselector.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/filter_options.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/gtkdisplay.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/gtkjoystick.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/gtkkeyboard.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/gtkmouse.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/gtkui.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/keysyms.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/memory.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/menu_data.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/options.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/picture.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/pokefinder.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/pokemem.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/resources.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/rollback.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/roms.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/statusbar.Po # am--include-marker +include ui/gtk3/$(DEPDIR)/stock.Po # am--include-marker +include ui/null/$(DEPDIR)/null_ui.Po # am--include-marker +include ui/null/$(DEPDIR)/options.Po # am--include-marker +include ui/scaler/$(DEPDIR)/scaler.Po # am--include-marker +include ui/scaler/$(DEPDIR)/snes_ntsc.Po # am--include-marker +include ui/scaler/$(DEPDIR)/unittests_palcompositetest-snes_ntsc.Po # am--include-marker +include ui/scaler/$(DEPDIR)/unittests_scalerexpandtest-scaler.Po # am--include-marker +include ui/sdl/$(DEPDIR)/keysyms.Po # am--include-marker +include ui/sdl/$(DEPDIR)/sdldisplay.Po # am--include-marker +include ui/sdl/$(DEPDIR)/sdljoystick.Po # am--include-marker +include ui/sdl/$(DEPDIR)/sdlkeyboard.Po # am--include-marker +include ui/sdl/$(DEPDIR)/sdlui.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/sdl2_display.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/sdl2_display_internal.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/sdl2_joystick.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/sdl2_joystick_internal.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/sdl2_keyboard.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/sdl2_mouse_internal.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/sdl2_scaler_state.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/sdl2_ui.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/unittests_sdl2displaytest-sdl2_display_internal.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/unittests_sdl2joysticktest-sdl2_joystick_internal.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/unittests_sdl2mousetest-sdl2_mouse_internal.Po # am--include-marker +include ui/sdl2/$(DEPDIR)/unittests_sdl2scalerstatetest-sdl2_scaler_state.Po # am--include-marker +include ui/widget/$(DEPDIR)/about.Po # am--include-marker +include ui/widget/$(DEPDIR)/binary.Po # am--include-marker +include ui/widget/$(DEPDIR)/browse.Po # am--include-marker +include ui/widget/$(DEPDIR)/debugger.Po # am--include-marker +include ui/widget/$(DEPDIR)/error.Po # am--include-marker +include ui/widget/$(DEPDIR)/filesel.Po # am--include-marker +include ui/widget/$(DEPDIR)/memory.Po # am--include-marker +include ui/widget/$(DEPDIR)/menu.Po # am--include-marker +include ui/widget/$(DEPDIR)/menu_data.Po # am--include-marker +include ui/widget/$(DEPDIR)/options.Po # am--include-marker +include ui/widget/$(DEPDIR)/picture.Po # am--include-marker +include ui/widget/$(DEPDIR)/pokefinder.Po # am--include-marker +include ui/widget/$(DEPDIR)/pokemem.Po # am--include-marker +include ui/widget/$(DEPDIR)/query.Po # am--include-marker +include ui/widget/$(DEPDIR)/roms.Po # am--include-marker +include ui/widget/$(DEPDIR)/select.Po # am--include-marker +include ui/widget/$(DEPDIR)/text.Po # am--include-marker +include ui/widget/$(DEPDIR)/widget.Po # am--include-marker +include ui/wii/$(DEPDIR)/keysyms.Po # am--include-marker +include ui/wii/$(DEPDIR)/wiidisplay.Po # am--include-marker +include ui/wii/$(DEPDIR)/wiijoystick.Po # am--include-marker +include ui/wii/$(DEPDIR)/wiikeyboard.Po # am--include-marker +include ui/wii/$(DEPDIR)/wiimouse.Po # am--include-marker +include ui/wii/$(DEPDIR)/wiiui.Po # am--include-marker +include ui/win32/$(DEPDIR)/about.Po # am--include-marker +include ui/win32/$(DEPDIR)/binary.Po # am--include-marker +include ui/win32/$(DEPDIR)/browse.Po # am--include-marker +include ui/win32/$(DEPDIR)/confirm.Po # am--include-marker +include ui/win32/$(DEPDIR)/debugger.Po # am--include-marker +include ui/win32/$(DEPDIR)/debuglog.Po # am--include-marker +include ui/win32/$(DEPDIR)/fileselector.Po # am--include-marker +include ui/win32/$(DEPDIR)/hyperlinks.Po # am--include-marker +include ui/win32/$(DEPDIR)/keysyms.Po # am--include-marker +include ui/win32/$(DEPDIR)/memorybrowser.Po # am--include-marker +include ui/win32/$(DEPDIR)/menu_data.Po # am--include-marker +include ui/win32/$(DEPDIR)/options.Po # am--include-marker +include ui/win32/$(DEPDIR)/picture.Po # am--include-marker +include ui/win32/$(DEPDIR)/pokefinder.Po # am--include-marker +include ui/win32/$(DEPDIR)/pokemem.Po # am--include-marker +include ui/win32/$(DEPDIR)/rollback.Po # am--include-marker +include ui/win32/$(DEPDIR)/roms.Po # am--include-marker +include ui/win32/$(DEPDIR)/statusbar.Po # am--include-marker +include ui/win32/$(DEPDIR)/win32display.Po # am--include-marker +include ui/win32/$(DEPDIR)/win32joystick.Po # am--include-marker +include ui/win32/$(DEPDIR)/win32keyboard.Po # am--include-marker +include ui/win32/$(DEPDIR)/win32mouse.Po # am--include-marker +include ui/win32/$(DEPDIR)/win32ui.Po # am--include-marker +include ui/win32/$(DEPDIR)/winsparkle.Po # am--include-marker +include ui/xlib/$(DEPDIR)/keysyms.Po # am--include-marker +include ui/xlib/$(DEPDIR)/xdisplay.Po # am--include-marker +include ui/xlib/$(DEPDIR)/xerror.Po # am--include-marker +include ui/xlib/$(DEPDIR)/xjoystick.Po # am--include-marker +include ui/xlib/$(DEPDIR)/xkeyboard.Po # am--include-marker +include ui/xlib/$(DEPDIR)/xui.Po # am--include-marker +include unittests/$(DEPDIR)/displaytest-displaytest.Po # am--include-marker +include unittests/$(DEPDIR)/palcompositetest-palcompositetest.Po # am--include-marker +include unittests/$(DEPDIR)/scalerexpandtest-scalerexpandtest.Po # am--include-marker +include unittests/$(DEPDIR)/sdl2displaytest-sdl2displaytest.Po # am--include-marker +include unittests/$(DEPDIR)/sdl2joysticktest-sdl2joysticktest.Po # am--include-marker +include unittests/$(DEPDIR)/sdl2mousetest-sdl2mousetest.Po # am--include-marker +include unittests/$(DEPDIR)/sdl2scalerstatetest-sdl2scalerstatetest.Po # am--include-marker +include unittests/$(DEPDIR)/unittests.Po # am--include-marker +include z80/$(DEPDIR)/coretest-coretest.Po # am--include-marker +include z80/$(DEPDIR)/coretest-z80.Po # am--include-marker +include z80/$(DEPDIR)/z80.Po # am--include-marker +include z80/$(DEPDIR)/z80_debugger_variables.Po # am--include-marker +include z80/$(DEPDIR)/z80_ops.Po # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) + +.c.o: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< + +.c.obj: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ + $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Plo +# $(AM_V_CC)source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< + +unittests/displaytest-displaytest.o: unittests/displaytest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/displaytest-displaytest.o -MD -MP -MF unittests/$(DEPDIR)/displaytest-displaytest.Tpo -c -o unittests/displaytest-displaytest.o `test -f 'unittests/displaytest.c' || echo '$(srcdir)/'`unittests/displaytest.c + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/displaytest-displaytest.Tpo unittests/$(DEPDIR)/displaytest-displaytest.Po +# $(AM_V_CC)source='unittests/displaytest.c' object='unittests/displaytest-displaytest.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/displaytest-displaytest.o `test -f 'unittests/displaytest.c' || echo '$(srcdir)/'`unittests/displaytest.c + +unittests/displaytest-displaytest.obj: unittests/displaytest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/displaytest-displaytest.obj -MD -MP -MF unittests/$(DEPDIR)/displaytest-displaytest.Tpo -c -o unittests/displaytest-displaytest.obj `if test -f 'unittests/displaytest.c'; then $(CYGPATH_W) 'unittests/displaytest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/displaytest.c'; fi` + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/displaytest-displaytest.Tpo unittests/$(DEPDIR)/displaytest-displaytest.Po +# $(AM_V_CC)source='unittests/displaytest.c' object='unittests/displaytest-displaytest.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/displaytest-displaytest.obj `if test -f 'unittests/displaytest.c'; then $(CYGPATH_W) 'unittests/displaytest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/displaytest.c'; fi` + +unittests_displaytest-display.o: display.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests_displaytest-display.o -MD -MP -MF $(DEPDIR)/unittests_displaytest-display.Tpo -c -o unittests_displaytest-display.o `test -f 'display.c' || echo '$(srcdir)/'`display.c + $(AM_V_at)$(am__mv) $(DEPDIR)/unittests_displaytest-display.Tpo $(DEPDIR)/unittests_displaytest-display.Po +# $(AM_V_CC)source='display.c' object='unittests_displaytest-display.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests_displaytest-display.o `test -f 'display.c' || echo '$(srcdir)/'`display.c + +unittests_displaytest-display.obj: display.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests_displaytest-display.obj -MD -MP -MF $(DEPDIR)/unittests_displaytest-display.Tpo -c -o unittests_displaytest-display.obj `if test -f 'display.c'; then $(CYGPATH_W) 'display.c'; else $(CYGPATH_W) '$(srcdir)/display.c'; fi` + $(AM_V_at)$(am__mv) $(DEPDIR)/unittests_displaytest-display.Tpo $(DEPDIR)/unittests_displaytest-display.Po +# $(AM_V_CC)source='display.c' object='unittests_displaytest-display.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests_displaytest-display.obj `if test -f 'display.c'; then $(CYGPATH_W) 'display.c'; else $(CYGPATH_W) '$(srcdir)/display.c'; fi` + +unittests/palcompositetest-palcompositetest.o: unittests/palcompositetest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_palcompositetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/palcompositetest-palcompositetest.o -MD -MP -MF unittests/$(DEPDIR)/palcompositetest-palcompositetest.Tpo -c -o unittests/palcompositetest-palcompositetest.o `test -f 'unittests/palcompositetest.c' || echo '$(srcdir)/'`unittests/palcompositetest.c + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/palcompositetest-palcompositetest.Tpo unittests/$(DEPDIR)/palcompositetest-palcompositetest.Po +# $(AM_V_CC)source='unittests/palcompositetest.c' object='unittests/palcompositetest-palcompositetest.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_palcompositetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/palcompositetest-palcompositetest.o `test -f 'unittests/palcompositetest.c' || echo '$(srcdir)/'`unittests/palcompositetest.c + +unittests/palcompositetest-palcompositetest.obj: unittests/palcompositetest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_palcompositetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/palcompositetest-palcompositetest.obj -MD -MP -MF unittests/$(DEPDIR)/palcompositetest-palcompositetest.Tpo -c -o unittests/palcompositetest-palcompositetest.obj `if test -f 'unittests/palcompositetest.c'; then $(CYGPATH_W) 'unittests/palcompositetest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/palcompositetest.c'; fi` + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/palcompositetest-palcompositetest.Tpo unittests/$(DEPDIR)/palcompositetest-palcompositetest.Po +# $(AM_V_CC)source='unittests/palcompositetest.c' object='unittests/palcompositetest-palcompositetest.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_palcompositetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/palcompositetest-palcompositetest.obj `if test -f 'unittests/palcompositetest.c'; then $(CYGPATH_W) 'unittests/palcompositetest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/palcompositetest.c'; fi` + +ui/scaler/unittests_palcompositetest-snes_ntsc.o: ui/scaler/snes_ntsc.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_palcompositetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/scaler/unittests_palcompositetest-snes_ntsc.o -MD -MP -MF ui/scaler/$(DEPDIR)/unittests_palcompositetest-snes_ntsc.Tpo -c -o ui/scaler/unittests_palcompositetest-snes_ntsc.o `test -f 'ui/scaler/snes_ntsc.c' || echo '$(srcdir)/'`ui/scaler/snes_ntsc.c + $(AM_V_at)$(am__mv) ui/scaler/$(DEPDIR)/unittests_palcompositetest-snes_ntsc.Tpo ui/scaler/$(DEPDIR)/unittests_palcompositetest-snes_ntsc.Po +# $(AM_V_CC)source='ui/scaler/snes_ntsc.c' object='ui/scaler/unittests_palcompositetest-snes_ntsc.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_palcompositetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/scaler/unittests_palcompositetest-snes_ntsc.o `test -f 'ui/scaler/snes_ntsc.c' || echo '$(srcdir)/'`ui/scaler/snes_ntsc.c + +ui/scaler/unittests_palcompositetest-snes_ntsc.obj: ui/scaler/snes_ntsc.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_palcompositetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/scaler/unittests_palcompositetest-snes_ntsc.obj -MD -MP -MF ui/scaler/$(DEPDIR)/unittests_palcompositetest-snes_ntsc.Tpo -c -o ui/scaler/unittests_palcompositetest-snes_ntsc.obj `if test -f 'ui/scaler/snes_ntsc.c'; then $(CYGPATH_W) 'ui/scaler/snes_ntsc.c'; else $(CYGPATH_W) '$(srcdir)/ui/scaler/snes_ntsc.c'; fi` + $(AM_V_at)$(am__mv) ui/scaler/$(DEPDIR)/unittests_palcompositetest-snes_ntsc.Tpo ui/scaler/$(DEPDIR)/unittests_palcompositetest-snes_ntsc.Po +# $(AM_V_CC)source='ui/scaler/snes_ntsc.c' object='ui/scaler/unittests_palcompositetest-snes_ntsc.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_palcompositetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/scaler/unittests_palcompositetest-snes_ntsc.obj `if test -f 'ui/scaler/snes_ntsc.c'; then $(CYGPATH_W) 'ui/scaler/snes_ntsc.c'; else $(CYGPATH_W) '$(srcdir)/ui/scaler/snes_ntsc.c'; fi` + +unittests/scalerexpandtest-scalerexpandtest.o: unittests/scalerexpandtest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_scalerexpandtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/scalerexpandtest-scalerexpandtest.o -MD -MP -MF unittests/$(DEPDIR)/scalerexpandtest-scalerexpandtest.Tpo -c -o unittests/scalerexpandtest-scalerexpandtest.o `test -f 'unittests/scalerexpandtest.c' || echo '$(srcdir)/'`unittests/scalerexpandtest.c + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/scalerexpandtest-scalerexpandtest.Tpo unittests/$(DEPDIR)/scalerexpandtest-scalerexpandtest.Po +# $(AM_V_CC)source='unittests/scalerexpandtest.c' object='unittests/scalerexpandtest-scalerexpandtest.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_scalerexpandtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/scalerexpandtest-scalerexpandtest.o `test -f 'unittests/scalerexpandtest.c' || echo '$(srcdir)/'`unittests/scalerexpandtest.c + +unittests/scalerexpandtest-scalerexpandtest.obj: unittests/scalerexpandtest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_scalerexpandtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/scalerexpandtest-scalerexpandtest.obj -MD -MP -MF unittests/$(DEPDIR)/scalerexpandtest-scalerexpandtest.Tpo -c -o unittests/scalerexpandtest-scalerexpandtest.obj `if test -f 'unittests/scalerexpandtest.c'; then $(CYGPATH_W) 'unittests/scalerexpandtest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/scalerexpandtest.c'; fi` + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/scalerexpandtest-scalerexpandtest.Tpo unittests/$(DEPDIR)/scalerexpandtest-scalerexpandtest.Po +# $(AM_V_CC)source='unittests/scalerexpandtest.c' object='unittests/scalerexpandtest-scalerexpandtest.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_scalerexpandtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/scalerexpandtest-scalerexpandtest.obj `if test -f 'unittests/scalerexpandtest.c'; then $(CYGPATH_W) 'unittests/scalerexpandtest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/scalerexpandtest.c'; fi` + +ui/scaler/unittests_scalerexpandtest-scaler.o: ui/scaler/scaler.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_scalerexpandtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/scaler/unittests_scalerexpandtest-scaler.o -MD -MP -MF ui/scaler/$(DEPDIR)/unittests_scalerexpandtest-scaler.Tpo -c -o ui/scaler/unittests_scalerexpandtest-scaler.o `test -f 'ui/scaler/scaler.c' || echo '$(srcdir)/'`ui/scaler/scaler.c + $(AM_V_at)$(am__mv) ui/scaler/$(DEPDIR)/unittests_scalerexpandtest-scaler.Tpo ui/scaler/$(DEPDIR)/unittests_scalerexpandtest-scaler.Po +# $(AM_V_CC)source='ui/scaler/scaler.c' object='ui/scaler/unittests_scalerexpandtest-scaler.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_scalerexpandtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/scaler/unittests_scalerexpandtest-scaler.o `test -f 'ui/scaler/scaler.c' || echo '$(srcdir)/'`ui/scaler/scaler.c + +ui/scaler/unittests_scalerexpandtest-scaler.obj: ui/scaler/scaler.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_scalerexpandtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/scaler/unittests_scalerexpandtest-scaler.obj -MD -MP -MF ui/scaler/$(DEPDIR)/unittests_scalerexpandtest-scaler.Tpo -c -o ui/scaler/unittests_scalerexpandtest-scaler.obj `if test -f 'ui/scaler/scaler.c'; then $(CYGPATH_W) 'ui/scaler/scaler.c'; else $(CYGPATH_W) '$(srcdir)/ui/scaler/scaler.c'; fi` + $(AM_V_at)$(am__mv) ui/scaler/$(DEPDIR)/unittests_scalerexpandtest-scaler.Tpo ui/scaler/$(DEPDIR)/unittests_scalerexpandtest-scaler.Po +# $(AM_V_CC)source='ui/scaler/scaler.c' object='ui/scaler/unittests_scalerexpandtest-scaler.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_scalerexpandtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/scaler/unittests_scalerexpandtest-scaler.obj `if test -f 'ui/scaler/scaler.c'; then $(CYGPATH_W) 'ui/scaler/scaler.c'; else $(CYGPATH_W) '$(srcdir)/ui/scaler/scaler.c'; fi` + +unittests/sdl2displaytest-sdl2displaytest.o: unittests/sdl2displaytest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/sdl2displaytest-sdl2displaytest.o -MD -MP -MF unittests/$(DEPDIR)/sdl2displaytest-sdl2displaytest.Tpo -c -o unittests/sdl2displaytest-sdl2displaytest.o `test -f 'unittests/sdl2displaytest.c' || echo '$(srcdir)/'`unittests/sdl2displaytest.c + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/sdl2displaytest-sdl2displaytest.Tpo unittests/$(DEPDIR)/sdl2displaytest-sdl2displaytest.Po +# $(AM_V_CC)source='unittests/sdl2displaytest.c' object='unittests/sdl2displaytest-sdl2displaytest.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/sdl2displaytest-sdl2displaytest.o `test -f 'unittests/sdl2displaytest.c' || echo '$(srcdir)/'`unittests/sdl2displaytest.c + +unittests/sdl2displaytest-sdl2displaytest.obj: unittests/sdl2displaytest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/sdl2displaytest-sdl2displaytest.obj -MD -MP -MF unittests/$(DEPDIR)/sdl2displaytest-sdl2displaytest.Tpo -c -o unittests/sdl2displaytest-sdl2displaytest.obj `if test -f 'unittests/sdl2displaytest.c'; then $(CYGPATH_W) 'unittests/sdl2displaytest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/sdl2displaytest.c'; fi` + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/sdl2displaytest-sdl2displaytest.Tpo unittests/$(DEPDIR)/sdl2displaytest-sdl2displaytest.Po +# $(AM_V_CC)source='unittests/sdl2displaytest.c' object='unittests/sdl2displaytest-sdl2displaytest.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/sdl2displaytest-sdl2displaytest.obj `if test -f 'unittests/sdl2displaytest.c'; then $(CYGPATH_W) 'unittests/sdl2displaytest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/sdl2displaytest.c'; fi` + +ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.o: ui/sdl2/sdl2_display_internal.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.o -MD -MP -MF ui/sdl2/$(DEPDIR)/unittests_sdl2displaytest-sdl2_display_internal.Tpo -c -o ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.o `test -f 'ui/sdl2/sdl2_display_internal.c' || echo '$(srcdir)/'`ui/sdl2/sdl2_display_internal.c + $(AM_V_at)$(am__mv) ui/sdl2/$(DEPDIR)/unittests_sdl2displaytest-sdl2_display_internal.Tpo ui/sdl2/$(DEPDIR)/unittests_sdl2displaytest-sdl2_display_internal.Po +# $(AM_V_CC)source='ui/sdl2/sdl2_display_internal.c' object='ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.o `test -f 'ui/sdl2/sdl2_display_internal.c' || echo '$(srcdir)/'`ui/sdl2/sdl2_display_internal.c + +ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.obj: ui/sdl2/sdl2_display_internal.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.obj -MD -MP -MF ui/sdl2/$(DEPDIR)/unittests_sdl2displaytest-sdl2_display_internal.Tpo -c -o ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.obj `if test -f 'ui/sdl2/sdl2_display_internal.c'; then $(CYGPATH_W) 'ui/sdl2/sdl2_display_internal.c'; else $(CYGPATH_W) '$(srcdir)/ui/sdl2/sdl2_display_internal.c'; fi` + $(AM_V_at)$(am__mv) ui/sdl2/$(DEPDIR)/unittests_sdl2displaytest-sdl2_display_internal.Tpo ui/sdl2/$(DEPDIR)/unittests_sdl2displaytest-sdl2_display_internal.Po +# $(AM_V_CC)source='ui/sdl2/sdl2_display_internal.c' object='ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2displaytest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/sdl2/unittests_sdl2displaytest-sdl2_display_internal.obj `if test -f 'ui/sdl2/sdl2_display_internal.c'; then $(CYGPATH_W) 'ui/sdl2/sdl2_display_internal.c'; else $(CYGPATH_W) '$(srcdir)/ui/sdl2/sdl2_display_internal.c'; fi` + +unittests/sdl2joysticktest-sdl2joysticktest.o: unittests/sdl2joysticktest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2joysticktest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/sdl2joysticktest-sdl2joysticktest.o -MD -MP -MF unittests/$(DEPDIR)/sdl2joysticktest-sdl2joysticktest.Tpo -c -o unittests/sdl2joysticktest-sdl2joysticktest.o `test -f 'unittests/sdl2joysticktest.c' || echo '$(srcdir)/'`unittests/sdl2joysticktest.c + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/sdl2joysticktest-sdl2joysticktest.Tpo unittests/$(DEPDIR)/sdl2joysticktest-sdl2joysticktest.Po +# $(AM_V_CC)source='unittests/sdl2joysticktest.c' object='unittests/sdl2joysticktest-sdl2joysticktest.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2joysticktest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/sdl2joysticktest-sdl2joysticktest.o `test -f 'unittests/sdl2joysticktest.c' || echo '$(srcdir)/'`unittests/sdl2joysticktest.c + +unittests/sdl2joysticktest-sdl2joysticktest.obj: unittests/sdl2joysticktest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2joysticktest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/sdl2joysticktest-sdl2joysticktest.obj -MD -MP -MF unittests/$(DEPDIR)/sdl2joysticktest-sdl2joysticktest.Tpo -c -o unittests/sdl2joysticktest-sdl2joysticktest.obj `if test -f 'unittests/sdl2joysticktest.c'; then $(CYGPATH_W) 'unittests/sdl2joysticktest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/sdl2joysticktest.c'; fi` + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/sdl2joysticktest-sdl2joysticktest.Tpo unittests/$(DEPDIR)/sdl2joysticktest-sdl2joysticktest.Po +# $(AM_V_CC)source='unittests/sdl2joysticktest.c' object='unittests/sdl2joysticktest-sdl2joysticktest.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2joysticktest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/sdl2joysticktest-sdl2joysticktest.obj `if test -f 'unittests/sdl2joysticktest.c'; then $(CYGPATH_W) 'unittests/sdl2joysticktest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/sdl2joysticktest.c'; fi` + +ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.o: ui/sdl2/sdl2_joystick_internal.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2joysticktest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.o -MD -MP -MF ui/sdl2/$(DEPDIR)/unittests_sdl2joysticktest-sdl2_joystick_internal.Tpo -c -o ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.o `test -f 'ui/sdl2/sdl2_joystick_internal.c' || echo '$(srcdir)/'`ui/sdl2/sdl2_joystick_internal.c + $(AM_V_at)$(am__mv) ui/sdl2/$(DEPDIR)/unittests_sdl2joysticktest-sdl2_joystick_internal.Tpo ui/sdl2/$(DEPDIR)/unittests_sdl2joysticktest-sdl2_joystick_internal.Po +# $(AM_V_CC)source='ui/sdl2/sdl2_joystick_internal.c' object='ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2joysticktest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.o `test -f 'ui/sdl2/sdl2_joystick_internal.c' || echo '$(srcdir)/'`ui/sdl2/sdl2_joystick_internal.c + +ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.obj: ui/sdl2/sdl2_joystick_internal.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2joysticktest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.obj -MD -MP -MF ui/sdl2/$(DEPDIR)/unittests_sdl2joysticktest-sdl2_joystick_internal.Tpo -c -o ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.obj `if test -f 'ui/sdl2/sdl2_joystick_internal.c'; then $(CYGPATH_W) 'ui/sdl2/sdl2_joystick_internal.c'; else $(CYGPATH_W) '$(srcdir)/ui/sdl2/sdl2_joystick_internal.c'; fi` + $(AM_V_at)$(am__mv) ui/sdl2/$(DEPDIR)/unittests_sdl2joysticktest-sdl2_joystick_internal.Tpo ui/sdl2/$(DEPDIR)/unittests_sdl2joysticktest-sdl2_joystick_internal.Po +# $(AM_V_CC)source='ui/sdl2/sdl2_joystick_internal.c' object='ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2joysticktest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/sdl2/unittests_sdl2joysticktest-sdl2_joystick_internal.obj `if test -f 'ui/sdl2/sdl2_joystick_internal.c'; then $(CYGPATH_W) 'ui/sdl2/sdl2_joystick_internal.c'; else $(CYGPATH_W) '$(srcdir)/ui/sdl2/sdl2_joystick_internal.c'; fi` + +unittests/sdl2mousetest-sdl2mousetest.o: unittests/sdl2mousetest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2mousetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/sdl2mousetest-sdl2mousetest.o -MD -MP -MF unittests/$(DEPDIR)/sdl2mousetest-sdl2mousetest.Tpo -c -o unittests/sdl2mousetest-sdl2mousetest.o `test -f 'unittests/sdl2mousetest.c' || echo '$(srcdir)/'`unittests/sdl2mousetest.c + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/sdl2mousetest-sdl2mousetest.Tpo unittests/$(DEPDIR)/sdl2mousetest-sdl2mousetest.Po +# $(AM_V_CC)source='unittests/sdl2mousetest.c' object='unittests/sdl2mousetest-sdl2mousetest.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2mousetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/sdl2mousetest-sdl2mousetest.o `test -f 'unittests/sdl2mousetest.c' || echo '$(srcdir)/'`unittests/sdl2mousetest.c + +unittests/sdl2mousetest-sdl2mousetest.obj: unittests/sdl2mousetest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2mousetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/sdl2mousetest-sdl2mousetest.obj -MD -MP -MF unittests/$(DEPDIR)/sdl2mousetest-sdl2mousetest.Tpo -c -o unittests/sdl2mousetest-sdl2mousetest.obj `if test -f 'unittests/sdl2mousetest.c'; then $(CYGPATH_W) 'unittests/sdl2mousetest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/sdl2mousetest.c'; fi` + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/sdl2mousetest-sdl2mousetest.Tpo unittests/$(DEPDIR)/sdl2mousetest-sdl2mousetest.Po +# $(AM_V_CC)source='unittests/sdl2mousetest.c' object='unittests/sdl2mousetest-sdl2mousetest.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2mousetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/sdl2mousetest-sdl2mousetest.obj `if test -f 'unittests/sdl2mousetest.c'; then $(CYGPATH_W) 'unittests/sdl2mousetest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/sdl2mousetest.c'; fi` + +ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.o: ui/sdl2/sdl2_mouse_internal.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2mousetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.o -MD -MP -MF ui/sdl2/$(DEPDIR)/unittests_sdl2mousetest-sdl2_mouse_internal.Tpo -c -o ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.o `test -f 'ui/sdl2/sdl2_mouse_internal.c' || echo '$(srcdir)/'`ui/sdl2/sdl2_mouse_internal.c + $(AM_V_at)$(am__mv) ui/sdl2/$(DEPDIR)/unittests_sdl2mousetest-sdl2_mouse_internal.Tpo ui/sdl2/$(DEPDIR)/unittests_sdl2mousetest-sdl2_mouse_internal.Po +# $(AM_V_CC)source='ui/sdl2/sdl2_mouse_internal.c' object='ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2mousetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.o `test -f 'ui/sdl2/sdl2_mouse_internal.c' || echo '$(srcdir)/'`ui/sdl2/sdl2_mouse_internal.c + +ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.obj: ui/sdl2/sdl2_mouse_internal.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2mousetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.obj -MD -MP -MF ui/sdl2/$(DEPDIR)/unittests_sdl2mousetest-sdl2_mouse_internal.Tpo -c -o ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.obj `if test -f 'ui/sdl2/sdl2_mouse_internal.c'; then $(CYGPATH_W) 'ui/sdl2/sdl2_mouse_internal.c'; else $(CYGPATH_W) '$(srcdir)/ui/sdl2/sdl2_mouse_internal.c'; fi` + $(AM_V_at)$(am__mv) ui/sdl2/$(DEPDIR)/unittests_sdl2mousetest-sdl2_mouse_internal.Tpo ui/sdl2/$(DEPDIR)/unittests_sdl2mousetest-sdl2_mouse_internal.Po +# $(AM_V_CC)source='ui/sdl2/sdl2_mouse_internal.c' object='ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2mousetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/sdl2/unittests_sdl2mousetest-sdl2_mouse_internal.obj `if test -f 'ui/sdl2/sdl2_mouse_internal.c'; then $(CYGPATH_W) 'ui/sdl2/sdl2_mouse_internal.c'; else $(CYGPATH_W) '$(srcdir)/ui/sdl2/sdl2_mouse_internal.c'; fi` + +unittests/sdl2scalerstatetest-sdl2scalerstatetest.o: unittests/sdl2scalerstatetest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2scalerstatetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/sdl2scalerstatetest-sdl2scalerstatetest.o -MD -MP -MF unittests/$(DEPDIR)/sdl2scalerstatetest-sdl2scalerstatetest.Tpo -c -o unittests/sdl2scalerstatetest-sdl2scalerstatetest.o `test -f 'unittests/sdl2scalerstatetest.c' || echo '$(srcdir)/'`unittests/sdl2scalerstatetest.c + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/sdl2scalerstatetest-sdl2scalerstatetest.Tpo unittests/$(DEPDIR)/sdl2scalerstatetest-sdl2scalerstatetest.Po +# $(AM_V_CC)source='unittests/sdl2scalerstatetest.c' object='unittests/sdl2scalerstatetest-sdl2scalerstatetest.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2scalerstatetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/sdl2scalerstatetest-sdl2scalerstatetest.o `test -f 'unittests/sdl2scalerstatetest.c' || echo '$(srcdir)/'`unittests/sdl2scalerstatetest.c + +unittests/sdl2scalerstatetest-sdl2scalerstatetest.obj: unittests/sdl2scalerstatetest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2scalerstatetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unittests/sdl2scalerstatetest-sdl2scalerstatetest.obj -MD -MP -MF unittests/$(DEPDIR)/sdl2scalerstatetest-sdl2scalerstatetest.Tpo -c -o unittests/sdl2scalerstatetest-sdl2scalerstatetest.obj `if test -f 'unittests/sdl2scalerstatetest.c'; then $(CYGPATH_W) 'unittests/sdl2scalerstatetest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/sdl2scalerstatetest.c'; fi` + $(AM_V_at)$(am__mv) unittests/$(DEPDIR)/sdl2scalerstatetest-sdl2scalerstatetest.Tpo unittests/$(DEPDIR)/sdl2scalerstatetest-sdl2scalerstatetest.Po +# $(AM_V_CC)source='unittests/sdl2scalerstatetest.c' object='unittests/sdl2scalerstatetest-sdl2scalerstatetest.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2scalerstatetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unittests/sdl2scalerstatetest-sdl2scalerstatetest.obj `if test -f 'unittests/sdl2scalerstatetest.c'; then $(CYGPATH_W) 'unittests/sdl2scalerstatetest.c'; else $(CYGPATH_W) '$(srcdir)/unittests/sdl2scalerstatetest.c'; fi` + +ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.o: ui/sdl2/sdl2_scaler_state.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2scalerstatetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.o -MD -MP -MF ui/sdl2/$(DEPDIR)/unittests_sdl2scalerstatetest-sdl2_scaler_state.Tpo -c -o ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.o `test -f 'ui/sdl2/sdl2_scaler_state.c' || echo '$(srcdir)/'`ui/sdl2/sdl2_scaler_state.c + $(AM_V_at)$(am__mv) ui/sdl2/$(DEPDIR)/unittests_sdl2scalerstatetest-sdl2_scaler_state.Tpo ui/sdl2/$(DEPDIR)/unittests_sdl2scalerstatetest-sdl2_scaler_state.Po +# $(AM_V_CC)source='ui/sdl2/sdl2_scaler_state.c' object='ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2scalerstatetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.o `test -f 'ui/sdl2/sdl2_scaler_state.c' || echo '$(srcdir)/'`ui/sdl2/sdl2_scaler_state.c + +ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.obj: ui/sdl2/sdl2_scaler_state.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2scalerstatetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.obj -MD -MP -MF ui/sdl2/$(DEPDIR)/unittests_sdl2scalerstatetest-sdl2_scaler_state.Tpo -c -o ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.obj `if test -f 'ui/sdl2/sdl2_scaler_state.c'; then $(CYGPATH_W) 'ui/sdl2/sdl2_scaler_state.c'; else $(CYGPATH_W) '$(srcdir)/ui/sdl2/sdl2_scaler_state.c'; fi` + $(AM_V_at)$(am__mv) ui/sdl2/$(DEPDIR)/unittests_sdl2scalerstatetest-sdl2_scaler_state.Tpo ui/sdl2/$(DEPDIR)/unittests_sdl2scalerstatetest-sdl2_scaler_state.Po +# $(AM_V_CC)source='ui/sdl2/sdl2_scaler_state.c' object='ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unittests_sdl2scalerstatetest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ui/sdl2/unittests_sdl2scalerstatetest-sdl2_scaler_state.obj `if test -f 'ui/sdl2/sdl2_scaler_state.c'; then $(CYGPATH_W) 'ui/sdl2/sdl2_scaler_state.c'; else $(CYGPATH_W) '$(srcdir)/ui/sdl2/sdl2_scaler_state.c'; fi` + +z80/coretest-coretest.o: z80/coretest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(z80_coretest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT z80/coretest-coretest.o -MD -MP -MF z80/$(DEPDIR)/coretest-coretest.Tpo -c -o z80/coretest-coretest.o `test -f 'z80/coretest.c' || echo '$(srcdir)/'`z80/coretest.c + $(AM_V_at)$(am__mv) z80/$(DEPDIR)/coretest-coretest.Tpo z80/$(DEPDIR)/coretest-coretest.Po +# $(AM_V_CC)source='z80/coretest.c' object='z80/coretest-coretest.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(z80_coretest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o z80/coretest-coretest.o `test -f 'z80/coretest.c' || echo '$(srcdir)/'`z80/coretest.c + +z80/coretest-coretest.obj: z80/coretest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(z80_coretest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT z80/coretest-coretest.obj -MD -MP -MF z80/$(DEPDIR)/coretest-coretest.Tpo -c -o z80/coretest-coretest.obj `if test -f 'z80/coretest.c'; then $(CYGPATH_W) 'z80/coretest.c'; else $(CYGPATH_W) '$(srcdir)/z80/coretest.c'; fi` + $(AM_V_at)$(am__mv) z80/$(DEPDIR)/coretest-coretest.Tpo z80/$(DEPDIR)/coretest-coretest.Po +# $(AM_V_CC)source='z80/coretest.c' object='z80/coretest-coretest.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(z80_coretest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o z80/coretest-coretest.obj `if test -f 'z80/coretest.c'; then $(CYGPATH_W) 'z80/coretest.c'; else $(CYGPATH_W) '$(srcdir)/z80/coretest.c'; fi` + +z80/coretest-z80.o: z80/z80.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(z80_coretest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT z80/coretest-z80.o -MD -MP -MF z80/$(DEPDIR)/coretest-z80.Tpo -c -o z80/coretest-z80.o `test -f 'z80/z80.c' || echo '$(srcdir)/'`z80/z80.c + $(AM_V_at)$(am__mv) z80/$(DEPDIR)/coretest-z80.Tpo z80/$(DEPDIR)/coretest-z80.Po +# $(AM_V_CC)source='z80/z80.c' object='z80/coretest-z80.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(z80_coretest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o z80/coretest-z80.o `test -f 'z80/z80.c' || echo '$(srcdir)/'`z80/z80.c + +z80/coretest-z80.obj: z80/z80.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(z80_coretest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT z80/coretest-z80.obj -MD -MP -MF z80/$(DEPDIR)/coretest-z80.Tpo -c -o z80/coretest-z80.obj `if test -f 'z80/z80.c'; then $(CYGPATH_W) 'z80/z80.c'; else $(CYGPATH_W) '$(srcdir)/z80/z80.c'; fi` + $(AM_V_at)$(am__mv) z80/$(DEPDIR)/coretest-z80.Tpo z80/$(DEPDIR)/coretest-z80.Po +# $(AM_V_CC)source='z80/z80.c' object='z80/coretest-z80.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(z80_coretest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o z80/coretest-z80.obj `if test -f 'z80/z80.c'; then $(CYGPATH_W) 'z80/z80.c'; else $(CYGPATH_W) '$(srcdir)/z80/z80.c'; fi` + +.l.c: + $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) + +.y.c: + $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + -rm -rf unittests/.libs unittests/_libs + -rm -rf z80/.libs z80/_libs + +distclean-libtool: + -rm -f libtool config.lt +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-appdataDATA: $(appdata_DATA) + @$(NORMAL_INSTALL) + @list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(appdatadir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(appdatadir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(appdatadir)" || exit $$?; \ + done + +uninstall-appdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(appdatadir)'; $(am__uninstall_files_from_dir) +install-dist_bashcompletionDATA: $(dist_bashcompletion_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_bashcompletion_DATA)'; test -n "$(bashcompletiondir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bashcompletiondir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bashcompletiondir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bashcompletiondir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(bashcompletiondir)" || exit $$?; \ + done + +uninstall-dist_bashcompletionDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_bashcompletion_DATA)'; test -n "$(bashcompletiondir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(bashcompletiondir)'; $(am__uninstall_files_from_dir) +install-dist_icons128DATA: $(dist_icons128_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_icons128_DATA)'; test -n "$(icons128dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(icons128dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(icons128dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icons128dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(icons128dir)" || exit $$?; \ + done + +uninstall-dist_icons128DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_icons128_DATA)'; test -n "$(icons128dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(icons128dir)'; $(am__uninstall_files_from_dir) +install-dist_icons16DATA: $(dist_icons16_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_icons16_DATA)'; test -n "$(icons16dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(icons16dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(icons16dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icons16dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(icons16dir)" || exit $$?; \ + done + +uninstall-dist_icons16DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_icons16_DATA)'; test -n "$(icons16dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(icons16dir)'; $(am__uninstall_files_from_dir) +install-dist_icons256DATA: $(dist_icons256_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_icons256_DATA)'; test -n "$(icons256dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(icons256dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(icons256dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icons256dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(icons256dir)" || exit $$?; \ + done + +uninstall-dist_icons256DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_icons256_DATA)'; test -n "$(icons256dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(icons256dir)'; $(am__uninstall_files_from_dir) +install-dist_icons32DATA: $(dist_icons32_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_icons32_DATA)'; test -n "$(icons32dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(icons32dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(icons32dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icons32dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(icons32dir)" || exit $$?; \ + done + +uninstall-dist_icons32DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_icons32_DATA)'; test -n "$(icons32dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(icons32dir)'; $(am__uninstall_files_from_dir) +install-dist_icons48DATA: $(dist_icons48_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_icons48_DATA)'; test -n "$(icons48dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(icons48dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(icons48dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icons48dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(icons48dir)" || exit $$?; \ + done + +uninstall-dist_icons48DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_icons48_DATA)'; test -n "$(icons48dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(icons48dir)'; $(am__uninstall_files_from_dir) +install-dist_icons64DATA: $(dist_icons64_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_icons64_DATA)'; test -n "$(icons64dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(icons64dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(icons64dir)" || exit 1; \ fi; \ - rm -rf "$(APPCAST_DIR)"; \ - mkdir -p "$(APPCAST_DIR)"; \ - cp -f "$(APPCAST_ARCHIVE)" "$(APPCAST_DIR)/"; \ - "$(SPARKLE_GENERATE_APPCAST)" \ - --download-url-prefix "$$url_prefix" \ - -o "$(APPCAST_DIR)/$(APPCAST_OUTPUT)" \ - "$(APPCAST_DIR)"; \ - echo "Appcast generated: $(APPCAST_DIR)/$(APPCAST_OUTPUT)" - -appcast-push: appcast - @echo "Publishing Sparkle appcast..." - @if [ ! -d "$(APPCAST_PUSH_DIR)/.git" ]; then \ - echo "Error: appcast push repository not found: $(APPCAST_PUSH_DIR)"; \ - exit 1; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icons64dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(icons64dir)" || exit $$?; \ + done + +uninstall-dist_icons64DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_icons64_DATA)'; test -n "$(icons64dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(icons64dir)'; $(am__uninstall_files_from_dir) +install-dist_mimeicons128DATA: $(dist_mimeicons128_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_mimeicons128_DATA)'; test -n "$(mimeicons128dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mimeicons128dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mimeicons128dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimeicons128dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimeicons128dir)" || exit $$?; \ + done + +uninstall-dist_mimeicons128DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_mimeicons128_DATA)'; test -n "$(mimeicons128dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimeicons128dir)'; $(am__uninstall_files_from_dir) +install-dist_mimeicons16DATA: $(dist_mimeicons16_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_mimeicons16_DATA)'; test -n "$(mimeicons16dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mimeicons16dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mimeicons16dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimeicons16dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimeicons16dir)" || exit $$?; \ + done + +uninstall-dist_mimeicons16DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_mimeicons16_DATA)'; test -n "$(mimeicons16dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimeicons16dir)'; $(am__uninstall_files_from_dir) +install-dist_mimeicons256DATA: $(dist_mimeicons256_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_mimeicons256_DATA)'; test -n "$(mimeicons256dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mimeicons256dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mimeicons256dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimeicons256dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimeicons256dir)" || exit $$?; \ + done + +uninstall-dist_mimeicons256DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_mimeicons256_DATA)'; test -n "$(mimeicons256dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimeicons256dir)'; $(am__uninstall_files_from_dir) +install-dist_mimeicons32DATA: $(dist_mimeicons32_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_mimeicons32_DATA)'; test -n "$(mimeicons32dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mimeicons32dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mimeicons32dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimeicons32dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimeicons32dir)" || exit $$?; \ + done + +uninstall-dist_mimeicons32DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_mimeicons32_DATA)'; test -n "$(mimeicons32dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimeicons32dir)'; $(am__uninstall_files_from_dir) +install-dist_mimeicons48DATA: $(dist_mimeicons48_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_mimeicons48_DATA)'; test -n "$(mimeicons48dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mimeicons48dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mimeicons48dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimeicons48dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimeicons48dir)" || exit $$?; \ + done + +uninstall-dist_mimeicons48DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_mimeicons48_DATA)'; test -n "$(mimeicons48dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimeicons48dir)'; $(am__uninstall_files_from_dir) +install-dist_mimeicons64DATA: $(dist_mimeicons64_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_mimeicons64_DATA)'; test -n "$(mimeicons64dir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mimeicons64dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mimeicons64dir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimeicons64dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimeicons64dir)" || exit $$?; \ + done + +uninstall-dist_mimeicons64DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_mimeicons64_DATA)'; test -n "$(mimeicons64dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimeicons64dir)'; $(am__uninstall_files_from_dir) +install-fusemimeDATA: $(fusemime_DATA) + @$(NORMAL_INSTALL) + @list='$(fusemime_DATA)'; test -n "$(fusemimedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(fusemimedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(fusemimedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fusemimedir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(fusemimedir)" || exit $$?; \ + done + +uninstall-fusemimeDATA: + @$(NORMAL_UNINSTALL) + @list='$(fusemime_DATA)'; test -n "$(fusemimedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(fusemimedir)'; $(am__uninstall_files_from_dir) +install-metainfoDATA: $(metainfo_DATA) + @$(NORMAL_INSTALL) + @list='$(metainfo_DATA)'; test -n "$(metainfodir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(metainfodir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(metainfodir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(metainfodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(metainfodir)" || exit $$?; \ + done + +uninstall-metainfoDATA: + @$(NORMAL_UNINSTALL) + @list='$(metainfo_DATA)'; test -n "$(metainfodir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(metainfodir)'; $(am__uninstall_files_from_dir) +install-pkgdataDATA: $(pkgdata_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ + done + +uninstall-pkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi - @if [ ! -f "$(APPCAST_DIR)/$(APPCAST_OUTPUT)" ]; then \ - echo "Error: appcast not found: $(APPCAST_DIR)/$(APPCAST_OUTPUT)"; \ - exit 1; \ +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files +dist-hook: +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-zstd: distdir + tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + *.tar.zst*) \ + zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ fi - cp -f "$(APPCAST_DIR)/$(APPCAST_OUTPUT)" "$(APPCAST_PUSH_DIR)/$(APPCAST_OUTPUT)" - git -C "$(APPCAST_PUSH_DIR)" add "$(APPCAST_OUTPUT)" - @if git -C "$(APPCAST_PUSH_DIR)" diff --cached --quiet -- "$(APPCAST_OUTPUT)"; then \ - echo "No appcast changes to commit."; \ + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-local +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(PROGRAMS) $(MANS) $(DATA) $(HEADERS) config.h +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(bashcompletiondir)" "$(DESTDIR)$(icons128dir)" "$(DESTDIR)$(icons16dir)" "$(DESTDIR)$(icons256dir)" "$(DESTDIR)$(icons32dir)" "$(DESTDIR)$(icons48dir)" "$(DESTDIR)$(icons64dir)" "$(DESTDIR)$(mimeicons128dir)" "$(DESTDIR)$(mimeicons16dir)" "$(DESTDIR)$(mimeicons256dir)" "$(DESTDIR)$(mimeicons32dir)" "$(DESTDIR)$(mimeicons48dir)" "$(DESTDIR)$(mimeicons64dir)" "$(DESTDIR)$(fusemimedir)" "$(DESTDIR)$(metainfodir)" "$(DESTDIR)$(pkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ else \ - git -C "$(APPCAST_PUSH_DIR)" commit -m "Update FuseX $(FUSEX_VERSION)"; \ - git -C "$(APPCAST_PUSH_DIR)" push; \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f compat/$(DEPDIR)/$(am__dirstamp) + -rm -f compat/$(am__dirstamp) + -rm -f compat/amiga/$(DEPDIR)/$(am__dirstamp) + -rm -f compat/amiga/$(am__dirstamp) + -rm -f compat/linux/$(DEPDIR)/$(am__dirstamp) + -rm -f compat/linux/$(am__dirstamp) + -rm -f compat/morphos/$(DEPDIR)/$(am__dirstamp) + -rm -f compat/morphos/$(am__dirstamp) + -rm -f compat/unix/$(DEPDIR)/$(am__dirstamp) + -rm -f compat/unix/$(am__dirstamp) + -rm -f compat/wii/$(DEPDIR)/$(am__dirstamp) + -rm -f compat/wii/$(am__dirstamp) + -rm -f compat/win32/$(DEPDIR)/$(am__dirstamp) + -rm -f compat/win32/$(am__dirstamp) + -rm -f debugger/$(DEPDIR)/$(am__dirstamp) + -rm -f debugger/$(am__dirstamp) + -rm -f infrastructure/$(DEPDIR)/$(am__dirstamp) + -rm -f infrastructure/$(am__dirstamp) + -rm -f machines/$(DEPDIR)/$(am__dirstamp) + -rm -f machines/$(am__dirstamp) + -rm -f peripherals/$(DEPDIR)/$(am__dirstamp) + -rm -f peripherals/$(am__dirstamp) + -rm -f peripherals/disk/$(DEPDIR)/$(am__dirstamp) + -rm -f peripherals/disk/$(am__dirstamp) + -rm -f peripherals/flash/$(DEPDIR)/$(am__dirstamp) + -rm -f peripherals/flash/$(am__dirstamp) + -rm -f peripherals/fs/$(DEPDIR)/$(am__dirstamp) + -rm -f peripherals/fs/$(am__dirstamp) + -rm -f peripherals/http/$(DEPDIR)/$(am__dirstamp) + -rm -f peripherals/http/$(am__dirstamp) + -rm -f peripherals/ide/$(DEPDIR)/$(am__dirstamp) + -rm -f peripherals/ide/$(am__dirstamp) + -rm -f peripherals/nic/$(DEPDIR)/$(am__dirstamp) + -rm -f peripherals/nic/$(am__dirstamp) + -rm -f peripherals/nic/engines/$(DEPDIR)/$(am__dirstamp) + -rm -f peripherals/nic/engines/$(am__dirstamp) + -rm -f peripherals/nic/engines/jsonpath/$(DEPDIR)/$(am__dirstamp) + -rm -f peripherals/nic/engines/jsonpath/$(am__dirstamp) + -rm -f peripherals/security/$(DEPDIR)/$(am__dirstamp) + -rm -f peripherals/security/$(am__dirstamp) + -rm -f peripherals/sound/$(DEPDIR)/$(am__dirstamp) + -rm -f peripherals/sound/$(am__dirstamp) + -rm -f pokefinder/$(DEPDIR)/$(am__dirstamp) + -rm -f pokefinder/$(am__dirstamp) + -rm -f sound/$(DEPDIR)/$(am__dirstamp) + -rm -f sound/$(am__dirstamp) + -rm -f timer/$(DEPDIR)/$(am__dirstamp) + -rm -f timer/$(am__dirstamp) + -rm -f ui/fb/$(DEPDIR)/$(am__dirstamp) + -rm -f ui/fb/$(am__dirstamp) + -rm -f ui/gtk3/$(DEPDIR)/$(am__dirstamp) + -rm -f ui/gtk3/$(am__dirstamp) + -rm -f ui/null/$(DEPDIR)/$(am__dirstamp) + -rm -f ui/null/$(am__dirstamp) + -rm -f ui/scaler/$(DEPDIR)/$(am__dirstamp) + -rm -f ui/scaler/$(am__dirstamp) + -rm -f ui/sdl/$(DEPDIR)/$(am__dirstamp) + -rm -f ui/sdl/$(am__dirstamp) + -rm -f ui/sdl2/$(DEPDIR)/$(am__dirstamp) + -rm -f ui/sdl2/$(am__dirstamp) + -rm -f ui/widget/$(DEPDIR)/$(am__dirstamp) + -rm -f ui/widget/$(am__dirstamp) + -rm -f ui/wii/$(DEPDIR)/$(am__dirstamp) + -rm -f ui/wii/$(am__dirstamp) + -rm -f ui/win32/$(DEPDIR)/$(am__dirstamp) + -rm -f ui/win32/$(am__dirstamp) + -rm -f ui/xlib/$(DEPDIR)/$(am__dirstamp) + -rm -f ui/xlib/$(am__dirstamp) + -rm -f unittests/$(DEPDIR)/$(am__dirstamp) + -rm -f unittests/$(am__dirstamp) + -rm -f z80/$(DEPDIR)/$(am__dirstamp) + -rm -f z80/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -rm -f debugger/commandl.c + -rm -f debugger/commandy.c + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +install-data-hook: +uninstall-hook: +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f ./$(DEPDIR)/display.Po + -rm -f ./$(DEPDIR)/event.Po + -rm -f ./$(DEPDIR)/fuse.Po + -rm -f ./$(DEPDIR)/input.Po + -rm -f ./$(DEPDIR)/keyboard.Po + -rm -f ./$(DEPDIR)/loader.Po + -rm -f ./$(DEPDIR)/machine.Po + -rm -f ./$(DEPDIR)/memory_pages.Po + -rm -f ./$(DEPDIR)/mempool.Po + -rm -f ./$(DEPDIR)/menu.Po + -rm -f ./$(DEPDIR)/module.Po + -rm -f ./$(DEPDIR)/movie.Po + -rm -f ./$(DEPDIR)/periph.Po + -rm -f ./$(DEPDIR)/phantom_typist.Po + -rm -f ./$(DEPDIR)/profile.Po + -rm -f ./$(DEPDIR)/psg.Po + -rm -f ./$(DEPDIR)/rectangle.Po + -rm -f ./$(DEPDIR)/rzx.Po + -rm -f ./$(DEPDIR)/screenshot.Po + -rm -f ./$(DEPDIR)/settings.Po + -rm -f ./$(DEPDIR)/slt.Po + -rm -f ./$(DEPDIR)/snapshot.Po + -rm -f ./$(DEPDIR)/sound.Po + -rm -f ./$(DEPDIR)/spectrum.Po + -rm -f ./$(DEPDIR)/svg.Po + -rm -f ./$(DEPDIR)/tape.Po + -rm -f ./$(DEPDIR)/ui.Po + -rm -f ./$(DEPDIR)/uidisplay.Po + -rm -f ./$(DEPDIR)/uimedia.Po + -rm -f ./$(DEPDIR)/unittests_displaytest-display.Po + -rm -f ./$(DEPDIR)/utils.Po + -rm -f compat/$(DEPDIR)/dirname.Po + -rm -f compat/$(DEPDIR)/getopt.Po + -rm -f compat/$(DEPDIR)/getopt1.Po + -rm -f compat/amiga/$(DEPDIR)/osname.Po + -rm -f compat/amiga/$(DEPDIR)/paths.Po + -rm -f compat/linux/$(DEPDIR)/relative_paths.Po + -rm -f compat/morphos/$(DEPDIR)/osname.Po + -rm -f compat/unix/$(DEPDIR)/dir.Po + -rm -f compat/unix/$(DEPDIR)/file.Po + -rm -f compat/unix/$(DEPDIR)/osname.Po + -rm -f compat/unix/$(DEPDIR)/paths.Po + -rm -f compat/unix/$(DEPDIR)/relative_paths.Po + -rm -f compat/unix/$(DEPDIR)/socket.Po + -rm -f compat/unix/$(DEPDIR)/timer.Po + -rm -f compat/unix/$(DEPDIR)/tuntap.Po + -rm -f compat/wii/$(DEPDIR)/osname.Po + -rm -f compat/wii/$(DEPDIR)/paths.Po + -rm -f compat/wii/$(DEPDIR)/timer.Po + -rm -f compat/win32/$(DEPDIR)/osname.Po + -rm -f compat/win32/$(DEPDIR)/paths.Po + -rm -f compat/win32/$(DEPDIR)/socket.Po + -rm -f compat/win32/$(DEPDIR)/timer.Po + -rm -f debugger/$(DEPDIR)/breakpoint.Po + -rm -f debugger/$(DEPDIR)/command.Po + -rm -f debugger/$(DEPDIR)/commandl.Po + -rm -f debugger/$(DEPDIR)/commandy.Po + -rm -f debugger/$(DEPDIR)/debugger.Po + -rm -f debugger/$(DEPDIR)/disassemble.Po + -rm -f debugger/$(DEPDIR)/event.Po + -rm -f debugger/$(DEPDIR)/expression.Po + -rm -f debugger/$(DEPDIR)/gdbserver.Po + -rm -f debugger/$(DEPDIR)/gdbserver_remote_commands.Po + -rm -f debugger/$(DEPDIR)/gdbserver_utils.Po + -rm -f debugger/$(DEPDIR)/packets.Po + -rm -f debugger/$(DEPDIR)/system_variable.Po + -rm -f debugger/$(DEPDIR)/variable.Po + -rm -f debugger/$(DEPDIR)/vfile.Po + -rm -f debugger/$(DEPDIR)/vfile_ext.Po + -rm -f infrastructure/$(DEPDIR)/startup_manager.Po + -rm -f machines/$(DEPDIR)/machines_periph.Po + -rm -f machines/$(DEPDIR)/pentagon.Po + -rm -f machines/$(DEPDIR)/pentagon1024.Po + -rm -f machines/$(DEPDIR)/pentagon512.Po + -rm -f machines/$(DEPDIR)/scorpion.Po + -rm -f machines/$(DEPDIR)/spec128.Po + -rm -f machines/$(DEPDIR)/spec16.Po + -rm -f machines/$(DEPDIR)/spec48.Po + -rm -f machines/$(DEPDIR)/spec48_ntsc.Po + -rm -f machines/$(DEPDIR)/spec_se.Po + -rm -f machines/$(DEPDIR)/specplus2.Po + -rm -f machines/$(DEPDIR)/specplus2a.Po + -rm -f machines/$(DEPDIR)/specplus3.Po + -rm -f machines/$(DEPDIR)/specplus3e.Po + -rm -f machines/$(DEPDIR)/tc2048.Po + -rm -f machines/$(DEPDIR)/tc2068.Po + -rm -f machines/$(DEPDIR)/ts2068.Po + -rm -f peripherals/$(DEPDIR)/dck.Po + -rm -f peripherals/$(DEPDIR)/if1.Po + -rm -f peripherals/$(DEPDIR)/if2.Po + -rm -f peripherals/$(DEPDIR)/joystick.Po + -rm -f peripherals/$(DEPDIR)/kempmouse.Po + -rm -f peripherals/$(DEPDIR)/multiface.Po + -rm -f peripherals/$(DEPDIR)/printer.Po + -rm -f peripherals/$(DEPDIR)/scld.Po + -rm -f peripherals/$(DEPDIR)/speccyboot.Po + -rm -f peripherals/$(DEPDIR)/spectranet.Po + -rm -f peripherals/$(DEPDIR)/ttx2000s.Po + -rm -f peripherals/$(DEPDIR)/ula.Po + -rm -f peripherals/$(DEPDIR)/usource.Po + -rm -f peripherals/disk/$(DEPDIR)/beta.Po + -rm -f peripherals/disk/$(DEPDIR)/crc.Po + -rm -f peripherals/disk/$(DEPDIR)/didaktik.Po + -rm -f peripherals/disk/$(DEPDIR)/disciple.Po + -rm -f peripherals/disk/$(DEPDIR)/disk.Po + -rm -f peripherals/disk/$(DEPDIR)/fdd.Po + -rm -f peripherals/disk/$(DEPDIR)/opus.Po + -rm -f peripherals/disk/$(DEPDIR)/plusd.Po + -rm -f peripherals/disk/$(DEPDIR)/trdos.Po + -rm -f peripherals/disk/$(DEPDIR)/upd_fdc.Po + -rm -f peripherals/disk/$(DEPDIR)/wd_fdc.Po + -rm -f peripherals/flash/$(DEPDIR)/am29f010.Po + -rm -f peripherals/fs/$(DEPDIR)/ramfs.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_compat.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_fs.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_https.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_https_compat.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_overlay.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_romfs.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_worker.Po + -rm -f peripherals/http/$(DEPDIR)/http_sck.Po + -rm -f peripherals/http/$(DEPDIR)/httpc.Po + -rm -f peripherals/ide/$(DEPDIR)/divide.Po + -rm -f peripherals/ide/$(DEPDIR)/divmmc.Po + -rm -f peripherals/ide/$(DEPDIR)/divxxx.Po + -rm -f peripherals/ide/$(DEPDIR)/ide.Po + -rm -f peripherals/ide/$(DEPDIR)/simpleide.Po + -rm -f peripherals/ide/$(DEPDIR)/zxatasp.Po + -rm -f peripherals/ide/$(DEPDIR)/zxcf.Po + -rm -f peripherals/ide/$(DEPDIR)/zxmmc.Po + -rm -f peripherals/nic/$(DEPDIR)/dns_processor.Po + -rm -f peripherals/nic/$(DEPDIR)/dns_resolver.Po + -rm -f peripherals/nic/$(DEPDIR)/enc28j60.Po + -rm -f peripherals/nic/$(DEPDIR)/spectranext_controller.Po + -rm -f peripherals/nic/$(DEPDIR)/spectranext_stdout.Po + -rm -f peripherals/nic/$(DEPDIR)/w5100.Po + -rm -f peripherals/nic/$(DEPDIR)/w5100_socket.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/engine_argv.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/engine_fs.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/engine_utf8.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/json.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/parson.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/xpath.Po + -rm -f peripherals/nic/engines/jsonpath/$(DEPDIR)/ast.Po + -rm -f peripherals/nic/engines/jsonpath/$(DEPDIR)/lexer.Po + -rm -f peripherals/nic/engines/jsonpath/$(DEPDIR)/matcher.Po + -rm -f peripherals/nic/engines/jsonpath/$(DEPDIR)/parser.Po + -rm -f peripherals/security/$(DEPDIR)/ssh.Po + -rm -f peripherals/security/$(DEPDIR)/tls.Po + -rm -f peripherals/sound/$(DEPDIR)/ay.Po + -rm -f peripherals/sound/$(DEPDIR)/covox.Po + -rm -f peripherals/sound/$(DEPDIR)/fuller.Po + -rm -f peripherals/sound/$(DEPDIR)/melodik.Po + -rm -f peripherals/sound/$(DEPDIR)/sp0256.Po + -rm -f peripherals/sound/$(DEPDIR)/specdrum.Po + -rm -f peripherals/sound/$(DEPDIR)/uspeech.Po + -rm -f pokefinder/$(DEPDIR)/pokefinder.Po + -rm -f pokefinder/$(DEPDIR)/pokemem.Po + -rm -f sound/$(DEPDIR)/alsasound.Po + -rm -f sound/$(DEPDIR)/aosound.Po + -rm -f sound/$(DEPDIR)/blipbuffer.Po + -rm -f sound/$(DEPDIR)/coreaudiosound.Po + -rm -f sound/$(DEPDIR)/dxsound.Po + -rm -f sound/$(DEPDIR)/hpsound.Po + -rm -f sound/$(DEPDIR)/nullsound.Po + -rm -f sound/$(DEPDIR)/osssound.Po + -rm -f sound/$(DEPDIR)/pulsesound.Po + -rm -f sound/$(DEPDIR)/sdl2sound.Po + -rm -f sound/$(DEPDIR)/sdlsound.Po + -rm -f sound/$(DEPDIR)/sfifo.Po + -rm -f sound/$(DEPDIR)/sunsound.Po + -rm -f sound/$(DEPDIR)/wiisound.Po + -rm -f sound/$(DEPDIR)/win32sound.Po + -rm -f timer/$(DEPDIR)/native.Po + -rm -f timer/$(DEPDIR)/sdl.Po + -rm -f timer/$(DEPDIR)/timer.Po + -rm -f ui/fb/$(DEPDIR)/fbdisplay.Po + -rm -f ui/fb/$(DEPDIR)/fbjoystick.Po + -rm -f ui/fb/$(DEPDIR)/fbkeyboard.Po + -rm -f ui/fb/$(DEPDIR)/fbmouse.Po + -rm -f ui/fb/$(DEPDIR)/fbui.Po + -rm -f ui/fb/$(DEPDIR)/keysyms.Po + -rm -f ui/gtk3/$(DEPDIR)/binary.Po + -rm -f ui/gtk3/$(DEPDIR)/browse.Po + -rm -f ui/gtk3/$(DEPDIR)/confirm.Po + -rm -f ui/gtk3/$(DEPDIR)/debugger.Po + -rm -f ui/gtk3/$(DEPDIR)/fileselector.Po + -rm -f ui/gtk3/$(DEPDIR)/filter_options.Po + -rm -f ui/gtk3/$(DEPDIR)/gtkdisplay.Po + -rm -f ui/gtk3/$(DEPDIR)/gtkjoystick.Po + -rm -f ui/gtk3/$(DEPDIR)/gtkkeyboard.Po + -rm -f ui/gtk3/$(DEPDIR)/gtkmouse.Po + -rm -f ui/gtk3/$(DEPDIR)/gtkui.Po + -rm -f ui/gtk3/$(DEPDIR)/keysyms.Po + -rm -f ui/gtk3/$(DEPDIR)/memory.Po + -rm -f ui/gtk3/$(DEPDIR)/menu_data.Po + -rm -f ui/gtk3/$(DEPDIR)/options.Po + -rm -f ui/gtk3/$(DEPDIR)/picture.Po + -rm -f ui/gtk3/$(DEPDIR)/pokefinder.Po + -rm -f ui/gtk3/$(DEPDIR)/pokemem.Po + -rm -f ui/gtk3/$(DEPDIR)/resources.Po + -rm -f ui/gtk3/$(DEPDIR)/rollback.Po + -rm -f ui/gtk3/$(DEPDIR)/roms.Po + -rm -f ui/gtk3/$(DEPDIR)/statusbar.Po + -rm -f ui/gtk3/$(DEPDIR)/stock.Po + -rm -f ui/null/$(DEPDIR)/null_ui.Po + -rm -f ui/null/$(DEPDIR)/options.Po + -rm -f ui/scaler/$(DEPDIR)/scaler.Po + -rm -f ui/scaler/$(DEPDIR)/snes_ntsc.Po + -rm -f ui/scaler/$(DEPDIR)/unittests_palcompositetest-snes_ntsc.Po + -rm -f ui/scaler/$(DEPDIR)/unittests_scalerexpandtest-scaler.Po + -rm -f ui/sdl/$(DEPDIR)/keysyms.Po + -rm -f ui/sdl/$(DEPDIR)/sdldisplay.Po + -rm -f ui/sdl/$(DEPDIR)/sdljoystick.Po + -rm -f ui/sdl/$(DEPDIR)/sdlkeyboard.Po + -rm -f ui/sdl/$(DEPDIR)/sdlui.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_display.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_display_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_joystick.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_joystick_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_keyboard.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_mouse_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_scaler_state.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_ui.Po + -rm -f ui/sdl2/$(DEPDIR)/unittests_sdl2displaytest-sdl2_display_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/unittests_sdl2joysticktest-sdl2_joystick_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/unittests_sdl2mousetest-sdl2_mouse_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/unittests_sdl2scalerstatetest-sdl2_scaler_state.Po + -rm -f ui/widget/$(DEPDIR)/about.Po + -rm -f ui/widget/$(DEPDIR)/binary.Po + -rm -f ui/widget/$(DEPDIR)/browse.Po + -rm -f ui/widget/$(DEPDIR)/debugger.Po + -rm -f ui/widget/$(DEPDIR)/error.Po + -rm -f ui/widget/$(DEPDIR)/filesel.Po + -rm -f ui/widget/$(DEPDIR)/memory.Po + -rm -f ui/widget/$(DEPDIR)/menu.Po + -rm -f ui/widget/$(DEPDIR)/menu_data.Po + -rm -f ui/widget/$(DEPDIR)/options.Po + -rm -f ui/widget/$(DEPDIR)/picture.Po + -rm -f ui/widget/$(DEPDIR)/pokefinder.Po + -rm -f ui/widget/$(DEPDIR)/pokemem.Po + -rm -f ui/widget/$(DEPDIR)/query.Po + -rm -f ui/widget/$(DEPDIR)/roms.Po + -rm -f ui/widget/$(DEPDIR)/select.Po + -rm -f ui/widget/$(DEPDIR)/text.Po + -rm -f ui/widget/$(DEPDIR)/widget.Po + -rm -f ui/wii/$(DEPDIR)/keysyms.Po + -rm -f ui/wii/$(DEPDIR)/wiidisplay.Po + -rm -f ui/wii/$(DEPDIR)/wiijoystick.Po + -rm -f ui/wii/$(DEPDIR)/wiikeyboard.Po + -rm -f ui/wii/$(DEPDIR)/wiimouse.Po + -rm -f ui/wii/$(DEPDIR)/wiiui.Po + -rm -f ui/win32/$(DEPDIR)/about.Po + -rm -f ui/win32/$(DEPDIR)/binary.Po + -rm -f ui/win32/$(DEPDIR)/browse.Po + -rm -f ui/win32/$(DEPDIR)/confirm.Po + -rm -f ui/win32/$(DEPDIR)/debugger.Po + -rm -f ui/win32/$(DEPDIR)/debuglog.Po + -rm -f ui/win32/$(DEPDIR)/fileselector.Po + -rm -f ui/win32/$(DEPDIR)/hyperlinks.Po + -rm -f ui/win32/$(DEPDIR)/keysyms.Po + -rm -f ui/win32/$(DEPDIR)/memorybrowser.Po + -rm -f ui/win32/$(DEPDIR)/menu_data.Po + -rm -f ui/win32/$(DEPDIR)/options.Po + -rm -f ui/win32/$(DEPDIR)/picture.Po + -rm -f ui/win32/$(DEPDIR)/pokefinder.Po + -rm -f ui/win32/$(DEPDIR)/pokemem.Po + -rm -f ui/win32/$(DEPDIR)/rollback.Po + -rm -f ui/win32/$(DEPDIR)/roms.Po + -rm -f ui/win32/$(DEPDIR)/statusbar.Po + -rm -f ui/win32/$(DEPDIR)/win32display.Po + -rm -f ui/win32/$(DEPDIR)/win32joystick.Po + -rm -f ui/win32/$(DEPDIR)/win32keyboard.Po + -rm -f ui/win32/$(DEPDIR)/win32mouse.Po + -rm -f ui/win32/$(DEPDIR)/win32ui.Po + -rm -f ui/win32/$(DEPDIR)/winsparkle.Po + -rm -f ui/xlib/$(DEPDIR)/keysyms.Po + -rm -f ui/xlib/$(DEPDIR)/xdisplay.Po + -rm -f ui/xlib/$(DEPDIR)/xerror.Po + -rm -f ui/xlib/$(DEPDIR)/xjoystick.Po + -rm -f ui/xlib/$(DEPDIR)/xkeyboard.Po + -rm -f ui/xlib/$(DEPDIR)/xui.Po + -rm -f unittests/$(DEPDIR)/displaytest-displaytest.Po + -rm -f unittests/$(DEPDIR)/palcompositetest-palcompositetest.Po + -rm -f unittests/$(DEPDIR)/scalerexpandtest-scalerexpandtest.Po + -rm -f unittests/$(DEPDIR)/sdl2displaytest-sdl2displaytest.Po + -rm -f unittests/$(DEPDIR)/sdl2joysticktest-sdl2joysticktest.Po + -rm -f unittests/$(DEPDIR)/sdl2mousetest-sdl2mousetest.Po + -rm -f unittests/$(DEPDIR)/sdl2scalerstatetest-sdl2scalerstatetest.Po + -rm -f unittests/$(DEPDIR)/unittests.Po + -rm -f z80/$(DEPDIR)/coretest-coretest.Po + -rm -f z80/$(DEPDIR)/coretest-z80.Po + -rm -f z80/$(DEPDIR)/z80.Po + -rm -f z80/$(DEPDIR)/z80_debugger_variables.Po + -rm -f z80/$(DEPDIR)/z80_ops.Po + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-appdataDATA install-dist_bashcompletionDATA \ + install-dist_icons128DATA install-dist_icons16DATA \ + install-dist_icons256DATA install-dist_icons32DATA \ + install-dist_icons48DATA install-dist_icons64DATA \ + install-dist_mimeicons128DATA install-dist_mimeicons16DATA \ + install-dist_mimeicons256DATA install-dist_mimeicons32DATA \ + install-dist_mimeicons48DATA install-dist_mimeicons64DATA \ + install-fusemimeDATA install-man install-metainfoDATA \ + install-pkgdataDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f ./$(DEPDIR)/display.Po + -rm -f ./$(DEPDIR)/event.Po + -rm -f ./$(DEPDIR)/fuse.Po + -rm -f ./$(DEPDIR)/input.Po + -rm -f ./$(DEPDIR)/keyboard.Po + -rm -f ./$(DEPDIR)/loader.Po + -rm -f ./$(DEPDIR)/machine.Po + -rm -f ./$(DEPDIR)/memory_pages.Po + -rm -f ./$(DEPDIR)/mempool.Po + -rm -f ./$(DEPDIR)/menu.Po + -rm -f ./$(DEPDIR)/module.Po + -rm -f ./$(DEPDIR)/movie.Po + -rm -f ./$(DEPDIR)/periph.Po + -rm -f ./$(DEPDIR)/phantom_typist.Po + -rm -f ./$(DEPDIR)/profile.Po + -rm -f ./$(DEPDIR)/psg.Po + -rm -f ./$(DEPDIR)/rectangle.Po + -rm -f ./$(DEPDIR)/rzx.Po + -rm -f ./$(DEPDIR)/screenshot.Po + -rm -f ./$(DEPDIR)/settings.Po + -rm -f ./$(DEPDIR)/slt.Po + -rm -f ./$(DEPDIR)/snapshot.Po + -rm -f ./$(DEPDIR)/sound.Po + -rm -f ./$(DEPDIR)/spectrum.Po + -rm -f ./$(DEPDIR)/svg.Po + -rm -f ./$(DEPDIR)/tape.Po + -rm -f ./$(DEPDIR)/ui.Po + -rm -f ./$(DEPDIR)/uidisplay.Po + -rm -f ./$(DEPDIR)/uimedia.Po + -rm -f ./$(DEPDIR)/unittests_displaytest-display.Po + -rm -f ./$(DEPDIR)/utils.Po + -rm -f compat/$(DEPDIR)/dirname.Po + -rm -f compat/$(DEPDIR)/getopt.Po + -rm -f compat/$(DEPDIR)/getopt1.Po + -rm -f compat/amiga/$(DEPDIR)/osname.Po + -rm -f compat/amiga/$(DEPDIR)/paths.Po + -rm -f compat/linux/$(DEPDIR)/relative_paths.Po + -rm -f compat/morphos/$(DEPDIR)/osname.Po + -rm -f compat/unix/$(DEPDIR)/dir.Po + -rm -f compat/unix/$(DEPDIR)/file.Po + -rm -f compat/unix/$(DEPDIR)/osname.Po + -rm -f compat/unix/$(DEPDIR)/paths.Po + -rm -f compat/unix/$(DEPDIR)/relative_paths.Po + -rm -f compat/unix/$(DEPDIR)/socket.Po + -rm -f compat/unix/$(DEPDIR)/timer.Po + -rm -f compat/unix/$(DEPDIR)/tuntap.Po + -rm -f compat/wii/$(DEPDIR)/osname.Po + -rm -f compat/wii/$(DEPDIR)/paths.Po + -rm -f compat/wii/$(DEPDIR)/timer.Po + -rm -f compat/win32/$(DEPDIR)/osname.Po + -rm -f compat/win32/$(DEPDIR)/paths.Po + -rm -f compat/win32/$(DEPDIR)/socket.Po + -rm -f compat/win32/$(DEPDIR)/timer.Po + -rm -f debugger/$(DEPDIR)/breakpoint.Po + -rm -f debugger/$(DEPDIR)/command.Po + -rm -f debugger/$(DEPDIR)/commandl.Po + -rm -f debugger/$(DEPDIR)/commandy.Po + -rm -f debugger/$(DEPDIR)/debugger.Po + -rm -f debugger/$(DEPDIR)/disassemble.Po + -rm -f debugger/$(DEPDIR)/event.Po + -rm -f debugger/$(DEPDIR)/expression.Po + -rm -f debugger/$(DEPDIR)/gdbserver.Po + -rm -f debugger/$(DEPDIR)/gdbserver_remote_commands.Po + -rm -f debugger/$(DEPDIR)/gdbserver_utils.Po + -rm -f debugger/$(DEPDIR)/packets.Po + -rm -f debugger/$(DEPDIR)/system_variable.Po + -rm -f debugger/$(DEPDIR)/variable.Po + -rm -f debugger/$(DEPDIR)/vfile.Po + -rm -f debugger/$(DEPDIR)/vfile_ext.Po + -rm -f infrastructure/$(DEPDIR)/startup_manager.Po + -rm -f machines/$(DEPDIR)/machines_periph.Po + -rm -f machines/$(DEPDIR)/pentagon.Po + -rm -f machines/$(DEPDIR)/pentagon1024.Po + -rm -f machines/$(DEPDIR)/pentagon512.Po + -rm -f machines/$(DEPDIR)/scorpion.Po + -rm -f machines/$(DEPDIR)/spec128.Po + -rm -f machines/$(DEPDIR)/spec16.Po + -rm -f machines/$(DEPDIR)/spec48.Po + -rm -f machines/$(DEPDIR)/spec48_ntsc.Po + -rm -f machines/$(DEPDIR)/spec_se.Po + -rm -f machines/$(DEPDIR)/specplus2.Po + -rm -f machines/$(DEPDIR)/specplus2a.Po + -rm -f machines/$(DEPDIR)/specplus3.Po + -rm -f machines/$(DEPDIR)/specplus3e.Po + -rm -f machines/$(DEPDIR)/tc2048.Po + -rm -f machines/$(DEPDIR)/tc2068.Po + -rm -f machines/$(DEPDIR)/ts2068.Po + -rm -f peripherals/$(DEPDIR)/dck.Po + -rm -f peripherals/$(DEPDIR)/if1.Po + -rm -f peripherals/$(DEPDIR)/if2.Po + -rm -f peripherals/$(DEPDIR)/joystick.Po + -rm -f peripherals/$(DEPDIR)/kempmouse.Po + -rm -f peripherals/$(DEPDIR)/multiface.Po + -rm -f peripherals/$(DEPDIR)/printer.Po + -rm -f peripherals/$(DEPDIR)/scld.Po + -rm -f peripherals/$(DEPDIR)/speccyboot.Po + -rm -f peripherals/$(DEPDIR)/spectranet.Po + -rm -f peripherals/$(DEPDIR)/ttx2000s.Po + -rm -f peripherals/$(DEPDIR)/ula.Po + -rm -f peripherals/$(DEPDIR)/usource.Po + -rm -f peripherals/disk/$(DEPDIR)/beta.Po + -rm -f peripherals/disk/$(DEPDIR)/crc.Po + -rm -f peripherals/disk/$(DEPDIR)/didaktik.Po + -rm -f peripherals/disk/$(DEPDIR)/disciple.Po + -rm -f peripherals/disk/$(DEPDIR)/disk.Po + -rm -f peripherals/disk/$(DEPDIR)/fdd.Po + -rm -f peripherals/disk/$(DEPDIR)/opus.Po + -rm -f peripherals/disk/$(DEPDIR)/plusd.Po + -rm -f peripherals/disk/$(DEPDIR)/trdos.Po + -rm -f peripherals/disk/$(DEPDIR)/upd_fdc.Po + -rm -f peripherals/disk/$(DEPDIR)/wd_fdc.Po + -rm -f peripherals/flash/$(DEPDIR)/am29f010.Po + -rm -f peripherals/fs/$(DEPDIR)/ramfs.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_compat.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_fs.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_https.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_https_compat.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_overlay.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_romfs.Po + -rm -f peripherals/fs/$(DEPDIR)/xfs_worker.Po + -rm -f peripherals/http/$(DEPDIR)/http_sck.Po + -rm -f peripherals/http/$(DEPDIR)/httpc.Po + -rm -f peripherals/ide/$(DEPDIR)/divide.Po + -rm -f peripherals/ide/$(DEPDIR)/divmmc.Po + -rm -f peripherals/ide/$(DEPDIR)/divxxx.Po + -rm -f peripherals/ide/$(DEPDIR)/ide.Po + -rm -f peripherals/ide/$(DEPDIR)/simpleide.Po + -rm -f peripherals/ide/$(DEPDIR)/zxatasp.Po + -rm -f peripherals/ide/$(DEPDIR)/zxcf.Po + -rm -f peripherals/ide/$(DEPDIR)/zxmmc.Po + -rm -f peripherals/nic/$(DEPDIR)/dns_processor.Po + -rm -f peripherals/nic/$(DEPDIR)/dns_resolver.Po + -rm -f peripherals/nic/$(DEPDIR)/enc28j60.Po + -rm -f peripherals/nic/$(DEPDIR)/spectranext_controller.Po + -rm -f peripherals/nic/$(DEPDIR)/spectranext_stdout.Po + -rm -f peripherals/nic/$(DEPDIR)/w5100.Po + -rm -f peripherals/nic/$(DEPDIR)/w5100_socket.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/engine_argv.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/engine_fs.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/engine_utf8.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/json.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/parson.Po + -rm -f peripherals/nic/engines/$(DEPDIR)/xpath.Po + -rm -f peripherals/nic/engines/jsonpath/$(DEPDIR)/ast.Po + -rm -f peripherals/nic/engines/jsonpath/$(DEPDIR)/lexer.Po + -rm -f peripherals/nic/engines/jsonpath/$(DEPDIR)/matcher.Po + -rm -f peripherals/nic/engines/jsonpath/$(DEPDIR)/parser.Po + -rm -f peripherals/security/$(DEPDIR)/ssh.Po + -rm -f peripherals/security/$(DEPDIR)/tls.Po + -rm -f peripherals/sound/$(DEPDIR)/ay.Po + -rm -f peripherals/sound/$(DEPDIR)/covox.Po + -rm -f peripherals/sound/$(DEPDIR)/fuller.Po + -rm -f peripherals/sound/$(DEPDIR)/melodik.Po + -rm -f peripherals/sound/$(DEPDIR)/sp0256.Po + -rm -f peripherals/sound/$(DEPDIR)/specdrum.Po + -rm -f peripherals/sound/$(DEPDIR)/uspeech.Po + -rm -f pokefinder/$(DEPDIR)/pokefinder.Po + -rm -f pokefinder/$(DEPDIR)/pokemem.Po + -rm -f sound/$(DEPDIR)/alsasound.Po + -rm -f sound/$(DEPDIR)/aosound.Po + -rm -f sound/$(DEPDIR)/blipbuffer.Po + -rm -f sound/$(DEPDIR)/coreaudiosound.Po + -rm -f sound/$(DEPDIR)/dxsound.Po + -rm -f sound/$(DEPDIR)/hpsound.Po + -rm -f sound/$(DEPDIR)/nullsound.Po + -rm -f sound/$(DEPDIR)/osssound.Po + -rm -f sound/$(DEPDIR)/pulsesound.Po + -rm -f sound/$(DEPDIR)/sdl2sound.Po + -rm -f sound/$(DEPDIR)/sdlsound.Po + -rm -f sound/$(DEPDIR)/sfifo.Po + -rm -f sound/$(DEPDIR)/sunsound.Po + -rm -f sound/$(DEPDIR)/wiisound.Po + -rm -f sound/$(DEPDIR)/win32sound.Po + -rm -f timer/$(DEPDIR)/native.Po + -rm -f timer/$(DEPDIR)/sdl.Po + -rm -f timer/$(DEPDIR)/timer.Po + -rm -f ui/fb/$(DEPDIR)/fbdisplay.Po + -rm -f ui/fb/$(DEPDIR)/fbjoystick.Po + -rm -f ui/fb/$(DEPDIR)/fbkeyboard.Po + -rm -f ui/fb/$(DEPDIR)/fbmouse.Po + -rm -f ui/fb/$(DEPDIR)/fbui.Po + -rm -f ui/fb/$(DEPDIR)/keysyms.Po + -rm -f ui/gtk3/$(DEPDIR)/binary.Po + -rm -f ui/gtk3/$(DEPDIR)/browse.Po + -rm -f ui/gtk3/$(DEPDIR)/confirm.Po + -rm -f ui/gtk3/$(DEPDIR)/debugger.Po + -rm -f ui/gtk3/$(DEPDIR)/fileselector.Po + -rm -f ui/gtk3/$(DEPDIR)/filter_options.Po + -rm -f ui/gtk3/$(DEPDIR)/gtkdisplay.Po + -rm -f ui/gtk3/$(DEPDIR)/gtkjoystick.Po + -rm -f ui/gtk3/$(DEPDIR)/gtkkeyboard.Po + -rm -f ui/gtk3/$(DEPDIR)/gtkmouse.Po + -rm -f ui/gtk3/$(DEPDIR)/gtkui.Po + -rm -f ui/gtk3/$(DEPDIR)/keysyms.Po + -rm -f ui/gtk3/$(DEPDIR)/memory.Po + -rm -f ui/gtk3/$(DEPDIR)/menu_data.Po + -rm -f ui/gtk3/$(DEPDIR)/options.Po + -rm -f ui/gtk3/$(DEPDIR)/picture.Po + -rm -f ui/gtk3/$(DEPDIR)/pokefinder.Po + -rm -f ui/gtk3/$(DEPDIR)/pokemem.Po + -rm -f ui/gtk3/$(DEPDIR)/resources.Po + -rm -f ui/gtk3/$(DEPDIR)/rollback.Po + -rm -f ui/gtk3/$(DEPDIR)/roms.Po + -rm -f ui/gtk3/$(DEPDIR)/statusbar.Po + -rm -f ui/gtk3/$(DEPDIR)/stock.Po + -rm -f ui/null/$(DEPDIR)/null_ui.Po + -rm -f ui/null/$(DEPDIR)/options.Po + -rm -f ui/scaler/$(DEPDIR)/scaler.Po + -rm -f ui/scaler/$(DEPDIR)/snes_ntsc.Po + -rm -f ui/scaler/$(DEPDIR)/unittests_palcompositetest-snes_ntsc.Po + -rm -f ui/scaler/$(DEPDIR)/unittests_scalerexpandtest-scaler.Po + -rm -f ui/sdl/$(DEPDIR)/keysyms.Po + -rm -f ui/sdl/$(DEPDIR)/sdldisplay.Po + -rm -f ui/sdl/$(DEPDIR)/sdljoystick.Po + -rm -f ui/sdl/$(DEPDIR)/sdlkeyboard.Po + -rm -f ui/sdl/$(DEPDIR)/sdlui.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_display.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_display_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_joystick.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_joystick_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_keyboard.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_mouse_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_scaler_state.Po + -rm -f ui/sdl2/$(DEPDIR)/sdl2_ui.Po + -rm -f ui/sdl2/$(DEPDIR)/unittests_sdl2displaytest-sdl2_display_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/unittests_sdl2joysticktest-sdl2_joystick_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/unittests_sdl2mousetest-sdl2_mouse_internal.Po + -rm -f ui/sdl2/$(DEPDIR)/unittests_sdl2scalerstatetest-sdl2_scaler_state.Po + -rm -f ui/widget/$(DEPDIR)/about.Po + -rm -f ui/widget/$(DEPDIR)/binary.Po + -rm -f ui/widget/$(DEPDIR)/browse.Po + -rm -f ui/widget/$(DEPDIR)/debugger.Po + -rm -f ui/widget/$(DEPDIR)/error.Po + -rm -f ui/widget/$(DEPDIR)/filesel.Po + -rm -f ui/widget/$(DEPDIR)/memory.Po + -rm -f ui/widget/$(DEPDIR)/menu.Po + -rm -f ui/widget/$(DEPDIR)/menu_data.Po + -rm -f ui/widget/$(DEPDIR)/options.Po + -rm -f ui/widget/$(DEPDIR)/picture.Po + -rm -f ui/widget/$(DEPDIR)/pokefinder.Po + -rm -f ui/widget/$(DEPDIR)/pokemem.Po + -rm -f ui/widget/$(DEPDIR)/query.Po + -rm -f ui/widget/$(DEPDIR)/roms.Po + -rm -f ui/widget/$(DEPDIR)/select.Po + -rm -f ui/widget/$(DEPDIR)/text.Po + -rm -f ui/widget/$(DEPDIR)/widget.Po + -rm -f ui/wii/$(DEPDIR)/keysyms.Po + -rm -f ui/wii/$(DEPDIR)/wiidisplay.Po + -rm -f ui/wii/$(DEPDIR)/wiijoystick.Po + -rm -f ui/wii/$(DEPDIR)/wiikeyboard.Po + -rm -f ui/wii/$(DEPDIR)/wiimouse.Po + -rm -f ui/wii/$(DEPDIR)/wiiui.Po + -rm -f ui/win32/$(DEPDIR)/about.Po + -rm -f ui/win32/$(DEPDIR)/binary.Po + -rm -f ui/win32/$(DEPDIR)/browse.Po + -rm -f ui/win32/$(DEPDIR)/confirm.Po + -rm -f ui/win32/$(DEPDIR)/debugger.Po + -rm -f ui/win32/$(DEPDIR)/debuglog.Po + -rm -f ui/win32/$(DEPDIR)/fileselector.Po + -rm -f ui/win32/$(DEPDIR)/hyperlinks.Po + -rm -f ui/win32/$(DEPDIR)/keysyms.Po + -rm -f ui/win32/$(DEPDIR)/memorybrowser.Po + -rm -f ui/win32/$(DEPDIR)/menu_data.Po + -rm -f ui/win32/$(DEPDIR)/options.Po + -rm -f ui/win32/$(DEPDIR)/picture.Po + -rm -f ui/win32/$(DEPDIR)/pokefinder.Po + -rm -f ui/win32/$(DEPDIR)/pokemem.Po + -rm -f ui/win32/$(DEPDIR)/rollback.Po + -rm -f ui/win32/$(DEPDIR)/roms.Po + -rm -f ui/win32/$(DEPDIR)/statusbar.Po + -rm -f ui/win32/$(DEPDIR)/win32display.Po + -rm -f ui/win32/$(DEPDIR)/win32joystick.Po + -rm -f ui/win32/$(DEPDIR)/win32keyboard.Po + -rm -f ui/win32/$(DEPDIR)/win32mouse.Po + -rm -f ui/win32/$(DEPDIR)/win32ui.Po + -rm -f ui/win32/$(DEPDIR)/winsparkle.Po + -rm -f ui/xlib/$(DEPDIR)/keysyms.Po + -rm -f ui/xlib/$(DEPDIR)/xdisplay.Po + -rm -f ui/xlib/$(DEPDIR)/xerror.Po + -rm -f ui/xlib/$(DEPDIR)/xjoystick.Po + -rm -f ui/xlib/$(DEPDIR)/xkeyboard.Po + -rm -f ui/xlib/$(DEPDIR)/xui.Po + -rm -f unittests/$(DEPDIR)/displaytest-displaytest.Po + -rm -f unittests/$(DEPDIR)/palcompositetest-palcompositetest.Po + -rm -f unittests/$(DEPDIR)/scalerexpandtest-scalerexpandtest.Po + -rm -f unittests/$(DEPDIR)/sdl2displaytest-sdl2displaytest.Po + -rm -f unittests/$(DEPDIR)/sdl2joysticktest-sdl2joysticktest.Po + -rm -f unittests/$(DEPDIR)/sdl2mousetest-sdl2mousetest.Po + -rm -f unittests/$(DEPDIR)/sdl2scalerstatetest-sdl2scalerstatetest.Po + -rm -f unittests/$(DEPDIR)/unittests.Po + -rm -f z80/$(DEPDIR)/coretest-coretest.Po + -rm -f z80/$(DEPDIR)/coretest-z80.Po + -rm -f z80/$(DEPDIR)/z80.Po + -rm -f z80/$(DEPDIR)/z80_debugger_variables.Po + -rm -f z80/$(DEPDIR)/z80_ops.Po + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-appdataDATA uninstall-binPROGRAMS \ + uninstall-dist_bashcompletionDATA uninstall-dist_icons128DATA \ + uninstall-dist_icons16DATA uninstall-dist_icons256DATA \ + uninstall-dist_icons32DATA uninstall-dist_icons48DATA \ + uninstall-dist_icons64DATA uninstall-dist_mimeicons128DATA \ + uninstall-dist_mimeicons16DATA uninstall-dist_mimeicons256DATA \ + uninstall-dist_mimeicons32DATA uninstall-dist_mimeicons48DATA \ + uninstall-dist_mimeicons64DATA uninstall-fusemimeDATA \ + uninstall-man uninstall-metainfoDATA uninstall-pkgdataDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +uninstall-man: uninstall-man1 + +.MAKE: all check check-am install install-am install-data-am \ + install-exec install-strip uninstall-am + +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \ + check-am check-local clean clean-binPROGRAMS clean-cscope \ + clean-generic clean-libtool clean-noinstPROGRAMS cscope \ + cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ + dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ + dist-zip dist-zstd distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-appdataDATA install-binPROGRAMS install-data \ + install-data-am install-data-hook \ + install-dist_bashcompletionDATA install-dist_icons128DATA \ + install-dist_icons16DATA install-dist_icons256DATA \ + install-dist_icons32DATA install-dist_icons48DATA \ + install-dist_icons64DATA install-dist_mimeicons128DATA \ + install-dist_mimeicons16DATA install-dist_mimeicons256DATA \ + install-dist_mimeicons32DATA install-dist_mimeicons48DATA \ + install-dist_mimeicons64DATA install-dvi install-dvi-am \ + install-exec install-exec-am install-fusemimeDATA install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-metainfoDATA install-pdf install-pdf-am \ + install-pkgdataDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-appdataDATA \ + uninstall-binPROGRAMS uninstall-dist_bashcompletionDATA \ + uninstall-dist_icons128DATA uninstall-dist_icons16DATA \ + uninstall-dist_icons256DATA uninstall-dist_icons32DATA \ + uninstall-dist_icons48DATA uninstall-dist_icons64DATA \ + uninstall-dist_mimeicons128DATA uninstall-dist_mimeicons16DATA \ + uninstall-dist_mimeicons256DATA uninstall-dist_mimeicons32DATA \ + uninstall-dist_mimeicons48DATA uninstall-dist_mimeicons64DATA \ + uninstall-fusemimeDATA uninstall-hook uninstall-man \ + uninstall-man1 uninstall-metainfoDATA uninstall-pkgdataDATA + +.PRECIOUS: Makefile + + +#settings.c: settings-win32.pl settings.dat +# $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/settings-win32.pl $(srcdir)/settings.dat > $@.tmp && mv $@.tmp $@ +settings.c: settings.pl settings.dat + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/settings.pl $(srcdir)/settings.dat > $@.tmp && mv $@.tmp $@ + +settings.h: settings-header.pl settings.dat + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/settings-header.pl $(srcdir)/settings.dat > $@.tmp && mv $@.tmp $@ + +options.h: $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/null/options-header.pl $(srcdir)/ui/options.dat $(srcdir)/perl/Fuse.pm $(srcdir)/perl/Fuse/Dialog.pm + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/options.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/ui/null/options-header.pl - public > $@.tmp && mv $@.tmp $@ + +test: z80/coretest unittests/displaytest + z80/coretest $(srcdir)/z80/tests/tests.in > z80/tests.actual + cmp z80/tests.actual $(srcdir)/z80/tests/tests.expected + ./unittests/displaytest + +#windres.o: windres.rc data/win32/winfuse.ico data/win32/fuse.manifest $(ui_win32_res) +# $(AM_V_GEN)$(WINDRES) -I$(srcdir) -I. $(srcdir)/windres.rc $(LIBSPECTRUM_CFLAGS) $(CPPFLAGS) windres.o + +# Generate fuse.xml according to libspectrum capabilities +#data/fuse.xml: $(srcdir)/data/fuse.xml.in +# $(AM_V_GEN)$(MKDIR_P) data; \ +# if test -z "$(LIBSPEC_HAVE_ZLIB)"; then \ +# mime_zlib='/LIBSPECTRUM_HAVE_ZLIB_BEGIN/,/LIBSPECTRUM_HAVE_ZLIB_END/d'; \ +# else \ +# mime_zlib='/LIBSPECTRUM_HAVE_ZLIB/d'; \ +# fi; \ +# if test -z "$(LIBSPEC_HAVE_BZ2)"; then \ +# mime_bz2='/LIBSPECTRUM_HAVE_BZ2_BEGIN/,/LIBSPECTRUM_HAVE_BZ2_END/d'; \ +# else \ +# mime_bz2='/LIBSPECTRUM_HAVE_BZ2/d'; \ +# fi; \ +# $(SED) -e "$$mime_zlib" -e "$$mime_bz2" < $(srcdir)/data/fuse.xml.in > $@ + +# Generate net.sourceforge.fuse_emulator.Fuse.desktop from fuse.xml to keep mime types list in sync +#data/net.sourceforge.fuse_emulator.Fuse.desktop: $(srcdir)/data/net.sourceforge.fuse_emulator.Fuse.desktop.in data/fuse.xml +# $(AM_V_GEN)$(MKDIR_P) data; \ +# list=`$(SED) -e '/.*/\1;/' -e t -e d < data/fuse.xml | tr -d '\n'` && \ +# $(SED) -e "s|@MIME_TYPES@|$$list|" \ +# -e 's|@FUSE_BIN_EXTENSION@|$(EXEEXT)|' \ +# -e 's|@EXTRA_DESKTOP_CATEGORIES@|$(EXTRA_DESKTOP_CATEGORIES)|' \ +# < $(srcdir)/data/net.sourceforge.fuse_emulator.Fuse.desktop.in > $@ + +#update-database-cache: +# if test -z "$(DESTDIR)"; then \ +# update-desktop-database $(DESKTOP_DATADIR)/applications; \ +# update-mime-database $(DESKTOP_DATADIR)/mime; \ +# touch --no-create $(iconsdatadir); \ +# $(GTK_UPDATE_ICON_CACHE) -t ${iconsdatadir}; \ +# fi + +#install-data-hook: update-database-cache + +#uninstall-hook: update-database-cache + +#validate: data/net.sourceforge.fuse_emulator.Fuse.desktop +# ( dfvalidate=`which desktop-file-validate`; \ +# if test x$$dfvalidate != x && test -x $$dfvalidate; then \ +# $$dfvalidate $< || ( echo "* $< INVALID *"; exit 1 ) \ +# fi ) + +#dist-hook: validate + +#install-win32: all +# test -n "$(DESTDIR)" || { echo "ERROR: set DESTDIR path"; exit 1; } +# $(MKDIR_P) $(DESTDIR)/roms/ || exit 1 +# $(MKDIR_P) $(DESTDIR)/lib/ || exit 1 +# $(MKDIR_P) $(DESTDIR)/3rd-party/ || exit 1 +# test "$(UI)" != "sdl" -a "$(UI)" != "sdl2" || $(MKDIR_P) $(DESTDIR)/ui/widget/ || exit 1 +# cp $(top_srcdir)/roms/*.rom $(DESTDIR)/roms +# cp $(top_srcdir)/roms/README.copyright $(DESTDIR)/roms +# if test -d "$(top_srcdir)/roms/spectranext-launcher"; then \ +# $(MKDIR_P) "$(DESTDIR)/roms/spectranext-launcher"; \ +# cp "$(top_srcdir)/roms/spectranext-launcher/"* "$(DESTDIR)/roms/spectranext-launcher/"; \ +# fi +# cp $(top_srcdir)/lib/*.bmp $(DESTDIR)/lib +# cp $(top_srcdir)/lib/*.png $(DESTDIR)/lib +# cp $(top_srcdir)/lib/*.scr $(DESTDIR)/lib +# test "$(UI)" != "sdl" -a "$(UI)" != "sdl2" || cp $(top_builddir)/ui/widget/fuse.font $(DESTDIR)/ui/widget +# Copy fuse executable (we should manually copy the required libraries) +# cp $(top_builddir)/.libs/fuse$(EXEEXT) $(DESTDIR) || \ +# cp $(top_builddir)/fuse$(EXEEXT) $(DESTDIR) +# Get text files +# for file in AUTHORS ChangeLog COPYING README; \ +# do cp "$(top_srcdir)/$$file" "$(DESTDIR)/$$file.txt"; \ +# done +# cp "$(top_srcdir)/data/win32/README-win32.txt" "$(DESTDIR)/README-win32.txt" +# cp "$(top_srcdir)/data/win32/LICENSES.txt" "$(DESTDIR)/LICENSES.txt" +# @has_sdl=no; \ +# has_sdl2=no; \ +# test -f "$(DESTDIR)/SDL.dll" && has_sdl=yes; \ +# test -f "$(DESTDIR)/SDL2.dll" && has_sdl2=yes; \ +# awk -v has_sdl="$$has_sdl" -v has_sdl2="$$has_sdl2" '\ +# /^Files: SDL\.dll$$/ { skip = ( has_sdl != "yes" ); } \ +# /^Files: SDL2\.dll$$/ { skip = ( has_sdl2 != "yes" ); } \ +# /^Files: / && $$0 != "Files: SDL.dll" && $$0 != "Files: SDL2.dll" { skip = 0; } \ +# !skip { print }' \ +# "$(DESTDIR)/LICENSES.txt" > "$(DESTDIR)/LICENSES.txt.tmp" && \ +# mv "$(DESTDIR)/LICENSES.txt.tmp" "$(DESTDIR)/LICENSES.txt" +# Get manuals +# if test -n "$(GROFF)"; then \ +# sed ':a;N;$$!ba;s/\.PP\n\.TS/\.bp\n&/g' $(top_srcdir)/man/fuse.1 | \ +# $(GROFF) -t -Thtml -man -P -I -P manual > $(DESTDIR)/fuse.html; \ +# elif test -n "$(MAN2HTML)"; then \ +# $(MAN2HTML) -r $(top_srcdir)/man/fuse.1 | sed '1d' > $(DESTDIR)/fuse.html; \ +# fi +# -mv manual*.png $(DESTDIR); +# Convert to DOS line endings +# test -z "$(UNIX2DOS)" || find $(DESTDIR) -type f \( -name "*.txt" -or -name "*.html" -or -name "*.copyright" \) -exec $(UNIX2DOS) {} \; + +#install-win32-strip: install-win32 +# test -z "$(STRIP)" || $(STRIP) $(DESTDIR)/fuse$(EXEEXT) + +# Build local 3rdparty tree (MSYS2) if missing — provides DLLs for dist-win32-*. +#3rdparty-dist: +# @if test ! -d "$(top_srcdir)/3rdparty/dist/bin"; then \ +# echo "Building 3rdparty dependencies into $(top_srcdir)/3rdparty/dist ..."; \ +# cd "$(top_srcdir)/3rdparty" && $(MAKE) || { echo "Error: 3rdparty build failed"; exit 1; }; \ +# else \ +# echo "Using existing $(top_srcdir)/3rdparty/dist"; \ +# fi + +#dist-win32-dir: 3rdparty-dist +# $(MAKE) DESTDIR="$(top_win32dir)" STRIP="$(STRIP)" install-win32-strip +# @if test -d "$(top_srcdir)/3rdparty/dist/bin"; then \ +# echo "Copying DLLs from 3rdparty/dist/bin ..."; \ +# for dll in "$(top_srcdir)/3rdparty/dist/bin"/*.dll; do \ +# if test -f "$$dll"; then \ +# cp "$$dll" "$(top_win32dir)/"; \ +# echo " copied $$(basename $$dll)"; \ +# fi; \ +# done; \ +# fi +# @MINGW_BIN=""; \ +# if test -n "$$MSYSTEM"; then \ +# if test "$$MSYSTEM" = "MINGW64"; then \ +# MINGW_BIN="/mingw64/bin"; \ +# elif test "$$MSYSTEM" = "MINGW32"; then \ +# MINGW_BIN="/mingw32/bin"; \ +# elif test "$$MSYSTEM" = "UCRT64"; then \ +# MINGW_BIN="/ucrt64/bin"; \ +# fi; \ +# fi; \ +# if test -z "$$MINGW_BIN" && test -d "/mingw64/bin"; then \ +# MINGW_BIN="/mingw64/bin"; \ +# elif test -z "$$MINGW_BIN" && test -d "/ucrt64/bin"; then \ +# MINGW_BIN="/ucrt64/bin"; \ +# elif test -z "$$MINGW_BIN" && test -d "/mingw32/bin"; then \ +# MINGW_BIN="/mingw32/bin"; \ +# fi; \ +# if test -n "$$MINGW_BIN"; then \ +# echo "Copying MinGW runtime DLLs from $$MINGW_BIN ..."; \ +# for dll in libwinpthread-1.dll libstdc++-6.dll libgcc_s_seh-1.dll libgcc_s_dw2-1.dll; do \ +# if test -f "$$MINGW_BIN/$$dll"; then \ +# cp "$$MINGW_BIN/$$dll" "$(top_win32dir)/"; \ +# echo " copied $$dll"; \ +# fi; \ +# done; \ +# fi +# @if test -f "$(top_srcdir)/data/win32/WinSparkle.dll"; then \ +# cp "$(top_srcdir)/data/win32/WinSparkle.dll" "$(top_win32dir)/"; \ +# echo " copied WinSparkle.dll"; \ +# fi + +#dist-win32-dir-debug: +# $(MAKE) DESTDIR="$(top_win32dir)" install-win32 + +#dist-win32-zip: dist-win32-dir +# rm -f -- $(top_builddir)/$(package_win32).zip +# rm -f -- $(top_builddir)/$(package_win32).zip.sha1 +# test -n "$(top_win32dir)" || exit 1 +# @test `find $(top_win32dir) -type f -name \*.dll -print | wc -l` -ne 0 || \ +# { echo "ERROR: external libraries not found in $(top_win32dir). Please, manually copy them."; exit 1; } +# cd $(top_win32dir) && \ +# zip -q -9 -r $(abs_top_builddir)/$(package_win32).zip . +# -sha1sum $(top_builddir)/$(package_win32).zip > $(top_builddir)/$(package_win32).zip.sha1 && \ +# { test -z "$(UNIX2DOS)" || $(UNIX2DOS) $(top_builddir)/$(package_win32).zip.sha1; } + +#dist-win32-7z: dist-win32-dir +# rm -f -- $(top_builddir)/$(package_win32).7z +# rm -f -- $(top_builddir)/$(package_win32).7z.sha1 +# test -n "$(top_win32dir)" || exit 1 +# @test `find $(top_win32dir) -type f -name \*.dll -print | wc -l` -ne 0 || \ +# { echo "ERROR: external libraries not found in $(top_win32dir). Please, manually copy them."; exit 1; } +# cd $(top_win32dir) && \ +# 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on -bd $(abs_top_builddir)/$(package_win32).7z . +# -sha1sum $(top_builddir)/$(package_win32).7z > $(top_builddir)/$(package_win32).7z.sha1 && \ +# { test -z "$(UNIX2DOS)" || $(UNIX2DOS) $(top_builddir)/$(package_win32).7z.sha1; } + +#dist-win32-exe: dist-win32-dir +# rm -f -- $(top_builddir)/$(package_win32)-setup.exe +# rm -f -- $(top_builddir)/$(package_win32)-setup.exe.sha1 +# test -n "$(top_win32dir)" || exit 1 +# @test `find $(top_win32dir) -type f -name \*.dll -print | wc -l` -ne 0 || \ +# { echo "ERROR: external libraries not found in $(top_win32dir). Please, manually copy them."; exit 1; } +# Locate NSIS in PATH, MSYS /mingw64, or standard Windows install dirs (with or without .exe) +# @NSISFILE="$(abs_top_builddir)/data/win32/installer.nsi"; \ +# if makensis -VERSION > /dev/null 2>&1; then \ +# MAKENSIS="makensis"; \ +# elif [ -x "/mingw64/bin/makensis" ] || [ -x "/mingw64/bin/makensis.exe" ]; then \ +# MAKENSIS="/mingw64/bin/makensis"; \ +# elif [ -x "/ucrt64/bin/makensis" ] || [ -x "/ucrt64/bin/makensis.exe" ]; then \ +# MAKENSIS="/ucrt64/bin/makensis"; \ +# elif [ -x "/c/Program Files/NSIS/makensis.exe" ]; then \ +# MAKENSIS='/c/Program Files/NSIS/makensis.exe'; \ +# elif [ -x "/c/Program Files/NSIS/makensis" ]; then \ +# MAKENSIS='/c/Program Files/NSIS/makensis'; \ +# elif [ -x "/c/Program Files (x86)/NSIS/makensis.exe" ]; then \ +# MAKENSIS='/c/Program Files (x86)/NSIS/makensis.exe'; \ +# elif [ -x "/c/Program Files (x86)/NSIS/makensis" ]; then \ +# MAKENSIS='/c/Program Files (x86)/NSIS/makensis'; \ +# elif [ -x "/cygdrive/c/Program Files/NSIS/makensis.exe" ]; then \ +# MAKENSIS='/cygdrive/c/Program Files/NSIS/makensis.exe'; \ +# elif [ -x "/cygdrive/c/Program Files (x86)/NSIS/makensis.exe" ]; then \ +# MAKENSIS='/cygdrive/c/Program Files (x86)/NSIS/makensis.exe'; \ +# else \ +# echo 'ERROR: cannot locate makensis (install NSIS or: pacman -S mingw-w64-x86_64-nsis)'; exit 1; \ +# fi; \ +# case "`uname -s`" in \ +# CYGWIN*) NSISFILE=`cygpath -m $$NSISFILE`;; \ +# esac; \ +# cd $(top_win32dir); \ +# "$$MAKENSIS" -V2 -NOCD "$$NSISFILE" +# mv $(top_win32dir)/$(package_win32)-setup.exe $(top_builddir) +# -sha1sum $(top_builddir)/$(package_win32)-setup.exe > $(top_builddir)/$(package_win32)-setup.exe.sha1 && \ +# { test -z "$(UNIX2DOS)" || $(UNIX2DOS) $(top_builddir)/$(package_win32)-setup.exe.sha1; } + +#dist-win32: dist-win32-zip dist-win32-7z dist-win32-exe + +#distclean-win32: +# if test -d "$(top_builddir)/$(package_win32)"; then \ +# rm -rf -- "$(top_builddir)/$(package_win32)"; \ +# fi +# rm -f -- $(top_builddir)/$(package_win32).zip +# rm -f -- $(top_builddir)/$(package_win32).zip.sha1 +# rm -f -- $(top_builddir)/$(package_win32).7z +# rm -f -- $(top_builddir)/$(package_win32).7z.sha1 +# rm -f -- $(top_builddir)/$(package_win32)-setup.exe +# rm -f -- $(top_builddir)/$(package_win32)-setup.exe.sha1 + +#.PHONY: install-win32 install-win32-strip dist-win32 dist-win32-dir \ +# dist-win32-dir-debug dist-win32-zip dist-win32-7z dist-win32-exe \ +# distclean-win32 3rdparty-dist + +debugger/commandl.c: debugger/commandy.c +debugger/commandy.h: debugger/commandy.c + +ui/fb/keysyms.c: $(srcdir)/keysyms.pl $(srcdir)/keysyms.dat + @$(MKDIR_P) ui/fb + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/keysyms.pl fb $(srcdir)/keysyms.dat > $@.tmp && mv $@.tmp $@ + +ui/gtk3/keysyms.c: $(srcdir)/keysyms.pl $(srcdir)/keysyms.dat + @$(MKDIR_P) ui/gtk3 + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/keysyms.pl gtk $(srcdir)/keysyms.dat > $@.tmp && mv $@.tmp $@ + +ui/gtk3/menu_data.c: $(srcdir)/perl/cpp-perl.pl $(srcdir)/menu_data.pl $(srcdir)/menu_data.dat config.h + @$(MKDIR_P) ui/gtk3 + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/menu_data.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/menu_data.pl gtk c > $@.tmp && mv $@.tmp $@ + +ui/gtk3/menu_data.ui: $(srcdir)/perl/cpp-perl.pl $(srcdir)/menu_data.pl $(srcdir)/menu_data.dat config.h + @$(MKDIR_P) ui/gtk3 + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/menu_data.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/menu_data.pl gtk ui > $@.tmp && mv $@.tmp $@ + +ui/gtk3/options.stamp: $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/gtk3/options.pl $(srcdir)/ui/gtk3/options-header.pl $(srcdir)/ui/options.dat $(srcdir)/perl/Fuse.pm $(srcdir)/perl/Fuse/Dialog.pm + @$(MKDIR_P) ui/gtk3 + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/options.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/ui/gtk3/options.pl - > ui/gtk3/options.c.tmp && mv ui/gtk3/options.c.tmp ui/gtk3/options.c + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/options.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/ui/gtk3/options-header.pl - > ui/gtk3/options_internals.h.tmp && mv ui/gtk3/options_internals.h.tmp ui/gtk3/options_internals.h + @touch $@ + +ui/gtk3/options.c ui/gtk3/options_internals.h: ui/gtk3/options.stamp + +ui/gtk3/resources.c: ui/gtk3/resources.xml $(gtkui_resource_files) $(gtkui_built_resource_files) + $(AM_V_GEN)glib-compile-resources --sourcedir=$(srcdir) --sourcedir=$(builddir) --target=$@ --internal --generate-source --c-name=gtkui $< + +ui/gtk3/resources.h: ui/gtk3/resources.xml $(gtkui_resource_files) $(gtkui_built_resource_files) + $(AM_V_GEN)glib-compile-resources --sourcedir=$(srcdir) --sourcedir=$(builddir) --target=$@ --internal --generate-header --c-name=gtkui $< + +ui/null/options.c: $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/null/options.pl $(srcdir)/ui/options.dat $(srcdir)/perl/Fuse.pm $(srcdir)/perl/Fuse/Dialog.pm + @$(MKDIR_P) ui/null + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/options.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/ui/null/options.pl - > $@.tmp && mv $@.tmp $@ + +ui/scaler/scalers16.o: $(srcdir)/ui/scaler/scalers.c + $(AM_V_CC)$(COMPILE) -DSCALER_DATA_SIZE=2 -c $(srcdir)/ui/scaler/scalers.c -o $@ + +ui/scaler/scalers32.o: $(srcdir)/ui/scaler/scalers.c + $(AM_V_CC)$(COMPILE) -DSCALER_DATA_SIZE=4 -c $(srcdir)/ui/scaler/scalers.c -o $@ + +ui/sdl/keysyms.c: $(srcdir)/keysyms.pl $(srcdir)/keysyms.dat + @$(MKDIR_P) ui/sdl + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/keysyms.pl sdl $(srcdir)/keysyms.dat > $@.tmp && mv $@.tmp $@ + +ui/widget/menu_data.c: $(srcdir)/perl/cpp-perl.pl $(srcdir)/menu_data.dat $(srcdir)/menu_data.pl config.h + @$(MKDIR_P) ui/widget + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/menu_data.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/menu_data.pl widget > $@.tmp && mv $@.tmp $@ + +ui/widget/options.c: $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/widget/options.pl $(srcdir)/ui/options.dat $(srcdir)/perl/Fuse.pm $(srcdir)/perl/Fuse/Dialog.pm + @$(MKDIR_P) ui/widget + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/options.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/ui/widget/options.pl - > $@.tmp && mv $@.tmp $@ + +ui/widget/options_internals.h: $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/widget/options-header.pl $(srcdir)/ui/options.dat $(srcdir)/perl/Fuse.pm $(srcdir)/perl/Fuse/Dialog.pm + @$(MKDIR_P) ui/widget + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/options.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/ui/widget/options-header.pl - > $@.tmp && mv $@.tmp $@ + +ui/widget/fuse.font: $(srcdir)/ui/widget/mkfusefont.pl $(srcdir)/ui/widget/fuse.font.sbf + @$(MKDIR_P) ui/widget + $(AM_V_GEN)$(PERL) $(srcdir)/ui/widget/mkfusefont.pl $(srcdir)/ui/widget/fuse.font.sbf > $@.tmp && mv $@.tmp $@ + +ui/wii/keysyms.c: $(srcdir)/keysyms.pl $(srcdir)/keysyms.dat + @$(MKDIR_P) ui/wii + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/keysyms.pl wii $(srcdir)/keysyms.dat > $@.tmp && mv $@.tmp $@ + +ui/win32/keysyms.c: $(srcdir)/keysyms.pl $(srcdir)/keysyms.dat + @$(MKDIR_P) ui/win32 + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/keysyms.pl win32 $(srcdir)/keysyms.dat > $@.tmp && mv $@.tmp $@ + +ui/win32/menu_data.c: $(srcdir)/perl/cpp-perl.pl $(srcdir)/menu_data.pl $(srcdir)/menu_data.dat config.h + @$(MKDIR_P) ui/win32 + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/menu_data.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/menu_data.pl win32 c > $@.tmp && mv $@.tmp $@ + +ui/win32/menu_data.h: $(srcdir)/perl/cpp-perl.pl $(srcdir)/menu_data.pl $(srcdir)/menu_data.dat config.h + @$(MKDIR_P) ui/win32 + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/menu_data.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/menu_data.pl win32 h > $@.tmp && mv $@.tmp $@ + +ui/win32/menu_data.rc: $(srcdir)/perl/cpp-perl.pl $(srcdir)/menu_data.pl $(srcdir)/menu_data.dat config.h + @$(MKDIR_P) ui/win32 + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/menu_data.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/menu_data.pl win32 rc > $@.tmp && mv $@.tmp $@ + +ui/win32/options.c: $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/win32/options.pl $(srcdir)/ui/options.dat $(srcdir)/perl/Fuse.pm $(srcdir)/perl/Fuse/Dialog.pm + @$(MKDIR_P) ui/win32 + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/options.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/ui/win32/options.pl - > $@.tmp && mv $@.tmp $@ + +ui/win32/options_internals.h: $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/win32/options-header.pl $(srcdir)/ui/options.dat $(srcdir)/perl/Fuse.pm $(srcdir)/perl/Fuse/Dialog.pm + @$(MKDIR_P) ui/win32 + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/options.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/ui/win32/options-header.pl - > $@.tmp && mv $@.tmp $@ + +ui/win32/options.rc: $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/win32/options-resource.pl $(srcdir)/ui/options.dat $(srcdir)/perl/Fuse.pm $(srcdir)/perl/Fuse/Dialog.pm + @$(MKDIR_P) ui/win32 + $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/options.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/ui/win32/options-resource.pl - > $@.tmp && mv $@.tmp $@ + +ui/xlib/keysyms.c: $(srcdir)/keysyms.pl $(srcdir)/keysyms.dat + @$(MKDIR_P) ui/xlib + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/keysyms.pl x $(srcdir)/keysyms.dat > $@.tmp && mv $@.tmp $@ + +ui/xlib/xpixmaps.c: ui/xlib/xstatusbar.pl $(srcdir)/ui/xlib/xpixmaps.c.in + @$(MKDIR_P) ui/xlib + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/ui/xlib/xstatusbar.pl $(srcdir)/ui/xlib/xpixmaps.c.in > $@.tmp && mv $@.tmp $@ + +z80/opcodes_base.c: $(srcdir)/z80/z80.pl $(srcdir)/z80/opcodes_base.dat + @$(MKDIR_P) z80 + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/z80/z80.pl $(srcdir)/z80/opcodes_base.dat > $@.tmp && mv $@.tmp $@ + +z80/z80_cb.c: $(srcdir)/z80/z80.pl $(srcdir)/z80/opcodes_cb.dat + @$(MKDIR_P) z80 + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/z80/z80.pl $(srcdir)/z80/opcodes_cb.dat > $@.tmp && mv $@.tmp $@ + +z80/z80_ddfd.c: $(srcdir)/z80/z80.pl $(srcdir)/z80/opcodes_ddfd.dat + @$(MKDIR_P) z80 + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/z80/z80.pl $(srcdir)/z80/opcodes_ddfd.dat > $@.tmp && mv $@.tmp $@ + +z80/z80_ddfdcb.c: $(srcdir)/z80/z80.pl $(srcdir)/z80/opcodes_ddfd.dat + @$(MKDIR_P) z80 + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/z80/z80.pl $(srcdir)/z80/opcodes_ddfdcb.dat > $@.tmp && mv $@.tmp $@ + +z80/z80_ed.c: $(srcdir)/z80/z80.pl $(srcdir)/z80/opcodes_ed.dat + @$(MKDIR_P) z80 + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/z80/z80.pl $(srcdir)/z80/opcodes_ed.dat > $@.tmp && mv $@.tmp $@ + +z80/coretest.o: $(srcdir)/z80/coretest.c + $(AM_V_CC)$(COMPILE) -DCORETEST -c $(srcdir)/z80/coretest.c -o $@ + +z80/z80_coretest.o: z80/z80_ops.c + $(AM_V_CC)$(COMPILE) -DCORETEST -c $(srcdir)/z80/z80_ops.c -o $@ + +check-local: fuse unittests/displaytest unittests/sdl2displaytest unittests/sdl2scalerstatetest unittests/sdl2joysticktest unittests/sdl2mousetest unittests/palcompositetest unittests/scalerexpandtest z80/coretest + @test -e $(top_builddir)/roms || ln -sf "$(abs_top_srcdir)/roms" $(top_builddir)/roms + $(top_builddir)/fuse --unittests + $(top_builddir)/unittests/displaytest + $(top_builddir)/unittests/sdl2displaytest + $(top_builddir)/unittests/sdl2scalerstatetest + $(top_builddir)/unittests/sdl2joysticktest + $(top_builddir)/unittests/sdl2mousetest + $(top_builddir)/unittests/palcompositetest + $(top_builddir)/unittests/scalerexpandtest + $(top_builddir)/z80/coretest $(srcdir)/z80/tests/tests.in > $(top_builddir)/z80/tests.actual + cmp $(top_builddir)/z80/tests.actual $(srcdir)/z80/tests/tests.expected -clean-3rdparty: - @echo "Cleaning 3rdparty build artifacts..." - rm -rf 3rdparty/audiofile/build - rm -rf 3rdparty/libgcrypt/build - rm -rf 3rdparty/FuseGenerator/build - rm -rf 3rdparty/FuseImporter/build - rm -rf 3rdparty/mbedtls/build - rm -rf 3rdparty/libssh2/build - -clean: clean-3rdparty - @echo "Cleaning FuseX build artifacts..." - rm -rf fusepb/build - rm -rf build - rm -rf dist - rm -f FuseX*.dmg +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debugger/Makefile.am b/debugger/Makefile.am index e8cf891d8..bffd9e3ef 100644 --- a/debugger/Makefile.am +++ b/debugger/Makefile.am @@ -32,12 +32,16 @@ fuse_SOURCES += \ debugger/gdbserver.c \ debugger/gdbserver_remote_commands.c \ debugger/gdbserver_utils.c \ - debugger/vfile.c \ - debugger/vfile_ext.c \ debugger/system_variable.c \ debugger/packets.c \ debugger/variable.c +if BUILD_SPECTRANET +fuse_SOURCES += \ + debugger/vfile.c \ + debugger/vfile_ext.c +endif + debugger/commandl.c: debugger/commandy.c debugger/commandy.h: debugger/commandy.c diff --git a/debugger/gdbserver.c b/debugger/gdbserver.c index bbf4ee83b..0b4891312 100644 --- a/debugger/gdbserver.c +++ b/debugger/gdbserver.c @@ -28,14 +28,15 @@ #include "mempool.h" #include "periph.h" #include "machine.h" -#include "peripherals/fs/xfs.h" #include "peripherals/spectranet.h" #include "settings.h" #include "utils.h" #include "ui/ui.h" #include "z80/z80.h" #include "z80/z80_macros.h" +#ifdef BUILD_SPECTRANET #include "vfile.h" +#endif #include #include @@ -333,7 +334,8 @@ static void process_vpacket(char *payload) } name = payload; - // Try vfile handler first (handles vFile: and vSpectranext: packets) + // vFile and vSpectranext are provided by the Spectranet XFS implementation. +#ifdef BUILD_SPECTRANET if (strncmp(name, "File:", 5) == 0 || strncmp(name, "Spectranext:", 12) == 0) { const char* response = vfile_handle_v(name, args ? args : "", (uint32_t)args_len); @@ -343,6 +345,7 @@ static void process_vpacket(char *payload) } return; } +#endif if (!strcmp("Cont", name)) { diff --git a/debugger/gdbserver_remote_commands.c b/debugger/gdbserver_remote_commands.c index b293c78ec..28c88b6ac 100644 --- a/debugger/gdbserver_remote_commands.c +++ b/debugger/gdbserver_remote_commands.c @@ -1,18 +1,24 @@ +#include "config.h" + #include "gdbserver_remote_commands.h" #include "gdbserver.h" #include #include #include +#include #include #include "fuse.h" #include "libspectrum.h" -#include "peripherals/fs/xfs.h" #include "peripherals/spectranet.h" #include "snapshot.h" #include "utils.h" +#ifdef BUILD_SPECTRANET +#include "peripherals/fs/xfs.h" +#endif + static const char * skip_spaces( const char *text ) { @@ -116,17 +122,98 @@ static uint8_t remote_command_spectranet_info( const char *args GCC_UNUSED ) snprintf( buffer, sizeof( buffer ), "Spectranet available: %s\n" "Spectranet paged in: %s\n" + "Page 0: 0x%02x\n" "Page A: 0x%02x\n" - "Page B: 0x%02x\n", + "Page B: 0x%02x\n" + "Page 3: 0x%02x\n", info.available ? "yes" : "no", info.paged ? "yes" : "no", + info.page_0, info.page_a, - info.page_b ); + info.page_b, + info.page_3 ); gdbserver_send_remote_console_output( buffer ); return 0; } +static uint8_t +remote_command_spectranet_set_page( const char *args ) +{ + char section; + const char *end; + char *page_end; + unsigned long page; + int destination; + char buffer[64]; + + args = skip_spaces( args ); + if( !args || !*args ) goto usage; + + section = tolower( (unsigned char)*args++ ); + if( *args && !isspace( (unsigned char)*args ) ) goto usage; + args = skip_spaces( args ); + if( !args || !*args ) goto usage; + + if( *args == '$' ) + page = strtoul( args + 1, &page_end, 16 ); + else + page = strtoul( args, &page_end, 0 ); + end = page_end; + if( end == args || (args[0] == '$' && end == args + 1) || + *skip_spaces( end ) || page > 0xff ) goto usage; + + switch( section ) { + case '0': destination = 0; break; + case 'a': destination = 1; break; + case 'b': destination = 2; break; + case '3': destination = 3; break; + default: goto usage; + } + + spectranet_map_page( destination, (int)page ); + snprintf( buffer, sizeof( buffer ), "Spectranet page %c set to 0x%02lx\n", + section, page ); + gdbserver_send_remote_console_output( buffer ); + return 0; + +usage: + gdbserver_send_remote_console_output( + "Usage: spectranet-set-page \n" ); + return 1; +} + +static uint8_t +remote_command_spectranet_set_pagein( const char *args ) +{ + const char *end; + size_t length; + + args = skip_spaces( args ); + if( !args || !*args ) goto usage; + end = args; + while( *end && !isspace( (unsigned char)*end ) ) end++; + length = end - args; + if( *skip_spaces( end ) ) goto usage; + + if( length == 3 && !strncmp( args, "yes", length ) ) { + spectranet_page( 0 ); + gdbserver_send_remote_console_output( "Spectranet paged in\n" ); + return 0; + } + if( length == 2 && !strncmp( args, "no", length ) ) { + spectranet_unpage(); + gdbserver_send_remote_console_output( "Spectranet paged out\n" ); + return 0; + } + +usage: + gdbserver_send_remote_console_output( + "Usage: spectranet-set-pagein \n" ); + return 1; +} + +#ifdef BUILD_SPECTRANET static uint8_t remote_command_xfs_debug( const char *args ) { int enable; @@ -179,12 +266,17 @@ static uint8_t remote_command_xfs_debug( const char *args ) return 0; } +#endif const struct remote_command_entry_t remote_commands[] = { { "help", remote_command_help }, { "reset", remote_command_reset }, { "dump", remote_command_dump }, { "spectranet-info", remote_command_spectranet_info }, + { "spectranet-set-page", remote_command_spectranet_set_page }, + { "spectranet-set-pagein", remote_command_spectranet_set_pagein }, +#ifdef BUILD_SPECTRANET { "xfs-debug", remote_command_xfs_debug }, +#endif { NULL, NULL } }; diff --git a/fusepb/FuseX.xcodeproj/project.pbxproj b/fusepb/FuseX.xcodeproj/project.pbxproj index 9adb8ae5b..0e3c5f0c2 100644 --- a/fusepb/FuseX.xcodeproj/project.pbxproj +++ b/fusepb/FuseX.xcodeproj/project.pbxproj @@ -101,7 +101,6 @@ B61F466009121DF100C8096C /* DebuggerController.m in Sources */ = {isa = PBXBuildFile; fileRef = B632C6AF03E5368700A864FD /* DebuggerController.m */; }; B61F466209121DF100C8096C /* FuseMenus.m in Sources */ = {isa = PBXBuildFile; fileRef = B66EA7840401075300A864FD /* FuseMenus.m */; }; B61F466309121DF100C8096C /* scaler.c in Sources */ = {isa = PBXBuildFile; fileRef = B63ABD8D042F175200A864FD /* scaler.c */; }; - FEC5107A347A105100000001 /* snes_ntsc.c in Sources */ = {isa = PBXBuildFile; fileRef = FEC51079347A105100000001 /* snes_ntsc.c */; }; B61F466409121DF100C8096C /* tc2068.c in Sources */ = {isa = PBXBuildFile; fileRef = B6FEA44F0444C3370013916D /* tc2068.c */; }; B61F466509121DF100C8096C /* dck.c in Sources */ = {isa = PBXBuildFile; fileRef = B65E4C600445DB7D00A864FD /* dck.c */; }; B61F466709121DF100C8096C /* psg.c in Sources */ = {isa = PBXBuildFile; fileRef = B6CA304C049CEC410037E9F2 /* psg.c */; }; @@ -323,6 +322,10 @@ D15E8F95259F5C0C0006FC79 /* gdbserver.c in Sources */ = {isa = PBXBuildFile; fileRef = D15E8F91259F5C0B0006FC79 /* gdbserver.c */; }; D1DF6DD826F8077F004A4AB7 /* debug.png in Resources */ = {isa = PBXBuildFile; fileRef = D1DF6DD726F8077F004A4AB7 /* debug.png */; }; D1ECC73E2924069800147252 /* ttx2000s.c in Sources */ = {isa = PBXBuildFile; fileRef = D1ECC73D2924069800147252 /* ttx2000s.c */; }; + FE0A0101301F000000000001 /* ramfs.c in Sources */ = {isa = PBXBuildFile; fileRef = FE0A0201301F000000000001 /* ramfs.c */; }; + FE0A0102301F000000000001 /* xfs_overlay.c in Sources */ = {isa = PBXBuildFile; fileRef = FE0A0203301F000000000001 /* xfs_overlay.c */; }; + FE0A0103301F000000000001 /* xfs_romfs.c in Sources */ = {isa = PBXBuildFile; fileRef = FE0A0204301F000000000001 /* xfs_romfs.c */; }; + FE0A0104301F000000000001 /* ../roms/spxromfs.bin in Resources */ = {isa = PBXBuildFile; fileRef = FE0A0205301F000000000001 /* ../roms/spxromfs.bin */; }; FE2DAC5A2F328D96009AC45A /* xfs.c in Sources */ = {isa = PBXBuildFile; fileRef = FE2DAC592F328D96009AC45A /* xfs.c */; }; FE2DAC6C2F329E6D009AC45A /* xfs_fs.c in Sources */ = {isa = PBXBuildFile; fileRef = FE2DAC6A2F329E6D009AC45A /* xfs_fs.c */; }; FE2DAC6D2F329E6D009AC45A /* xfs_worker.c in Sources */ = {isa = PBXBuildFile; fileRef = FE2DAC6B2F329E6D009AC45A /* xfs_worker.c */; }; @@ -359,12 +362,16 @@ FEC02C9F2EEF65D6008277BA /* spectranext_controller.c in Sources */ = {isa = PBXBuildFile; fileRef = FEC02C9C2EEF65D5008277BA /* spectranext_controller.c */; }; FEC02CA02EEF65D6008277BA /* spectranext.h in Sources */ = {isa = PBXBuildFile; fileRef = FEC02C9D2EEF65D5008277BA /* spectranext.h */; }; FEC02CA12EEF65D6008277BA /* spectranext_controller.h in Sources */ = {isa = PBXBuildFile; fileRef = FEC02C9E2EEF65D6008277BA /* spectranext_controller.h */; }; + FEC5107A347A105100000001 /* snes_ntsc.c in Sources */ = {isa = PBXBuildFile; fileRef = FEC51079347A105100000001 /* snes_ntsc.c */; }; FED23B142EE096F10013DD32 /* tls.c in Sources */ = {isa = PBXBuildFile; fileRef = FED23B122EE096F10013DD32 /* tls.c */; }; FED24C472EE104C60013DD32 /* mbedtls.framework in Copy Files */ = {isa = PBXBuildFile; fileRef = FED24C382EE1002B0013DD32 /* mbedtls.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; FED24C482EE104EB0013DD32 /* mbedtls.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FED24C382EE1002B0013DD32 /* mbedtls.framework */; }; FED24DE32EE108360013DD32 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FED24DE22EE108360013DD32 /* Security.framework */; }; FED24DE62EE10B590013DD32 /* dns_resolver.c in Sources */ = {isa = PBXBuildFile; fileRef = FED24DE42EE10B590013DD32 /* dns_resolver.c */; }; FED24DE72EE10B590013DD32 /* dns_processor.c in Sources */ = {isa = PBXBuildFile; fileRef = FED24DE52EE10B590013DD32 /* dns_processor.c */; }; + FEFB7C20301EB52200F1CFEC /* xfs_https_compat.c in Sources */ = {isa = PBXBuildFile; fileRef = FEFB7C1F301EB52200F1CFEC /* xfs_https_compat.c */; }; + FEFB7C22301EB52E00F1CFEC /* xfs_compat.c in Sources */ = {isa = PBXBuildFile; fileRef = FEFB7C21301EB52E00F1CFEC /* xfs_compat.c */; }; + FEFB7C243023F19700F1CFEC /* scalers32.c in Sources */ = {isa = PBXBuildFile; fileRef = FEFB7C233023F19700F1CFEC /* scalers32.c */; }; /* End PBXBuildFile section */ /* Begin PBXBuildRule section */ @@ -542,7 +549,6 @@ B639B7670A6BAFCF00927E24 /* csw.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = csw.icns; sourceTree = ""; }; B639B7D00A6BB45600927E24 /* raw.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = raw.icns; sourceTree = ""; }; B63ABD8D042F175200A864FD /* scaler.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = scaler.c; path = ../ui/scaler/scaler.c; sourceTree = SOURCE_ROOT; }; - FEC51079347A105100000001 /* snes_ntsc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = snes_ntsc.c; path = ../ui/scaler/snes_ntsc.c; sourceTree = SOURCE_ROOT; }; B63F9949077182B4004D6DFA /* RollbackController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RollbackController.h; path = controllers/RollbackController.h; sourceTree = SOURCE_ROOT; }; B63F994A077182B4004D6DFA /* RollbackController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = RollbackController.m; path = controllers/RollbackController.m; sourceTree = SOURCE_ROOT; }; B6403FD60A7E4B1A00E00B11 /* loader.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = loader.c; sourceTree = ""; }; @@ -936,6 +942,11 @@ F5F291060396932B01730B00 /* Credits.html */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.html; path = Credits.html; sourceTree = ""; }; F5F876370399540D011FA3A4 /* FuseController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FuseController.h; path = controllers/FuseController.h; sourceTree = SOURCE_ROOT; }; F5F876380399540D011FA3A4 /* FuseController.m */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; name = FuseController.m; path = controllers/FuseController.m; sourceTree = SOURCE_ROOT; tabWidth = 2; }; + FE0A0201301F000000000001 /* ramfs.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ramfs.c; sourceTree = ""; }; + FE0A0202301F000000000001 /* ramfs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ramfs.h; sourceTree = ""; }; + FE0A0203301F000000000001 /* xfs_overlay.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = xfs_overlay.c; sourceTree = ""; }; + FE0A0204301F000000000001 /* xfs_romfs.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = xfs_romfs.c; sourceTree = ""; }; + FE0A0205301F000000000001 /* ../roms/spxromfs.bin */ = {isa = PBXFileReference; lastKnownFileType = archive.macbinary; path = ../roms/spxromfs.bin; sourceTree = SOURCE_ROOT; }; FE2DAC582F328D96009AC45A /* xfs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xfs.h; sourceTree = ""; }; FE2DAC592F328D96009AC45A /* xfs.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = xfs.c; sourceTree = ""; }; FE2DAC5C2F328DD5009AC45A /* xfs_engines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xfs_engines.h; sourceTree = ""; }; @@ -992,6 +1003,7 @@ FEC02C9C2EEF65D5008277BA /* spectranext_controller.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = spectranext_controller.c; sourceTree = ""; }; FEC02C9D2EEF65D5008277BA /* spectranext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = spectranext.h; sourceTree = ""; }; FEC02C9E2EEF65D6008277BA /* spectranext_controller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = spectranext_controller.h; sourceTree = ""; }; + FEC51079347A105100000001 /* snes_ntsc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = snes_ntsc.c; path = ../ui/scaler/snes_ntsc.c; sourceTree = SOURCE_ROOT; }; FED23B102EE096F10013DD32 /* mbedtls_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mbedtls_config.h; sourceTree = ""; }; FED23B112EE096F10013DD32 /* tls.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tls.h; sourceTree = ""; }; FED23B122EE096F10013DD32 /* tls.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tls.c; sourceTree = ""; }; @@ -1000,6 +1012,10 @@ FED24DE42EE10B590013DD32 /* dns_resolver.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = dns_resolver.c; sourceTree = ""; }; FED24DE52EE10B590013DD32 /* dns_processor.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = dns_processor.c; sourceTree = ""; }; FED24DE82EE10C370013DD32 /* dns_resolver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dns_resolver.h; sourceTree = ""; }; + FEFB7C1E301EB52200F1CFEC /* xfs_https_compat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xfs_https_compat.h; sourceTree = ""; }; + FEFB7C1F301EB52200F1CFEC /* xfs_https_compat.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = xfs_https_compat.c; sourceTree = ""; }; + FEFB7C21301EB52E00F1CFEC /* xfs_compat.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = xfs_compat.c; sourceTree = ""; }; + FEFB7C233023F19700F1CFEC /* scalers32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = scalers32.c; path = scaler/scalers32.c; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1289,6 +1305,7 @@ 3B061F2A9CBA3011FBE7A640 /* d80.icns */, 06FA366DDA50516B0E710919 /* mlt.icns */, 384001994B177FFEB8AE6C99 /* udi.icns */, + FE0A0205301F000000000001 /* ../roms/spxromfs.bin */, ); path = resources; sourceTree = ""; @@ -1731,6 +1748,7 @@ B63ABD8D042F175200A864FD /* scaler.c */, FEC51079347A105100000001 /* snes_ntsc.c */, B62B19E00DD31DF500D42AAF /* scalers16.c */, + FEFB7C233023F19700F1CFEC /* scalers32.c */, ); path = scaler; sourceTree = ""; @@ -1872,10 +1890,17 @@ FE2DAC5C2F328DD5009AC45A /* xfs_engines.h */, FE2DAC582F328D96009AC45A /* xfs.h */, FE2DAC592F328D96009AC45A /* xfs.c */, + FEFB7C21301EB52E00F1CFEC /* xfs_compat.c */, + FE0A0202301F000000000001 /* ramfs.h */, + FE0A0201301F000000000001 /* ramfs.c */, FE2DAC6A2F329E6D009AC45A /* xfs_fs.c */, + FE0A0203301F000000000001 /* xfs_overlay.c */, + FE0A0204301F000000000001 /* xfs_romfs.c */, FE2DAC6B2F329E6D009AC45A /* xfs_worker.c */, FE2DAC6E2F329EE2009AC45A /* xfs_worker.h */, FE2DAC762F32A480009AC45A /* xfs_https.c */, + FEFB7C1E301EB52200F1CFEC /* xfs_https_compat.h */, + FEFB7C1F301EB52200F1CFEC /* xfs_https_compat.c */, ); path = fs; sourceTree = ""; @@ -2135,6 +2160,7 @@ 7F7BB782D4AEBC99DC6AF1C8 /* d80.icns in Resources */, 03A9A1325AFA09F88C578556 /* mlt.icns in Resources */, 7C22B962B64B1942413DF26A /* udi.icns in Resources */, + FE0A0104301F000000000001 /* ../roms/spxromfs.bin in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2281,10 +2307,15 @@ B6A6F1200B3EA737000B88E9 /* cocoascreenshot.m in Sources */, B6D0E10B1CFD54D400202683 /* uimedia.c in Sources */, B615BFE80B4261E50082D535 /* HIDJoysticks.m in Sources */, + FEFB7C243023F19700F1CFEC /* scalers32.c in Sources */, B6B076B30B59FE9A00D4F95C /* Emulator.m in Sources */, B6D0E1031CFD547C00202683 /* didaktik.c in Sources */, B6B99F8A0B5F798700EE408F /* cocoadisplay.m in Sources */, B67DC2190B63835100FA31B6 /* cocoastatusbar.m in Sources */, + FEFB7C22301EB52E00F1CFEC /* xfs_compat.c in Sources */, + FE0A0101301F000000000001 /* ramfs.c in Sources */, + FE0A0102301F000000000001 /* xfs_overlay.c in Sources */, + FE0A0103301F000000000001 /* xfs_romfs.c in Sources */, B68C32961D3BBF2D0082CBD4 /* startup_manager.c in Sources */, B65352F20B8CF6CC0083F942 /* SDL_sysjoystick.c in Sources */, B65353150B8FF3D20083F942 /* SDL_joystick.c in Sources */, @@ -2339,6 +2370,7 @@ FE2DAC7B2F32A500009AC45A /* httpc.c in Sources */, FE2DAC772F32A480009AC45A /* xfs_https.c in Sources */, B6DCBBD2114FA0E700DC9A11 /* ide.c in Sources */, + FEFB7C20301EB52200F1CFEC /* xfs_https_compat.c in Sources */, B6DCBBD4114FA0E700DC9A11 /* libspectrum.c in Sources */, B6DCBBD9114FA0E700DC9A11 /* memory.c in Sources */, B6DCBBDA114FA0E700DC9A11 /* microdrive.c in Sources */, diff --git a/fusepb/scaler/scalers32.c b/fusepb/scaler/scalers32.c new file mode 100644 index 000000000..1931cec4e --- /dev/null +++ b/fusepb/scaler/scalers32.c @@ -0,0 +1,28 @@ +/* scalers.c: the actual graphics scalers + * Copyright (C) 2003 Fredrick Meunier, Philip Kendall + * + * $Id$ + * + * Originally taken from ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001/2002 The ScummVM project + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#define SCALER_DATA_SIZE 4 + +#include "ui/scaler/scalers.c" diff --git a/memory_pages.c b/memory_pages.c index eabffa24b..994ce2581 100644 --- a/memory_pages.c +++ b/memory_pages.c @@ -393,24 +393,38 @@ readbyte( libspectrum_word address ) return opus_read( address ); if( spectranet_paged ) { + if( spectranet_w5100_paged_0 && address < 0x1000 ) + return spectranet_w5100_read( mapping, address ); if( spectranet_w5100_paged_a && address >= 0x1000 && address < 0x2000 ) return spectranet_w5100_read( mapping, address ); if( spectranet_w5100_paged_b && address >= 0x2000 && address < 0x3000 ) return spectranet_w5100_read( mapping, address ); + if( spectranet_w5100_paged_3 && address >= 0x3000 ) + return spectranet_w5100_read( mapping, address ); + if( spectranet_xfs_paged_0 && address < 0x1000 ) + return spectranet_xfs_read( mapping, address ); if( spectranet_xfs_paged_a && address >= 0x1000 && address < 0x2000 ) return spectranet_xfs_read( mapping, address ); if( spectranet_xfs_paged_b && address >= 0x2000 && address < 0x3000 ) return spectranet_xfs_read( mapping, address ); + if( spectranet_xfs_paged_3 && address >= 0x3000 ) + return spectranet_xfs_read( mapping, address ); + if( spectranet_spectranext_config_paged_0 && address < 0x1000 ) + return spectranet_spectranext_config_read( mapping, address ); if( spectranet_spectranext_config_paged_a && address >= 0x1000 && address < 0x2000 ) return spectranet_spectranext_config_read( mapping, address ); if( spectranet_spectranext_config_paged_b && address >= 0x2000 && address < 0x3000 ) return spectranet_spectranext_config_read( mapping, address ); - if( address < 0x1000 ) + if( spectranet_spectranext_config_paged_3 && address >= 0x3000 ) + return spectranet_spectranext_config_read( mapping, address ); + if( spectranet_flash_paged_0 && address < 0x1000 ) return spectranet_flash_rom_read( mapping, address ); if( spectranet_flash_paged_a && address >= 0x1000 && address < 0x2000 ) return spectranet_flash_rom_read( mapping, address ); if( spectranet_flash_paged_b && address >= 0x2000 && address < 0x3000 ) return spectranet_flash_rom_read( mapping, address ); + if( spectranet_flash_paged_3 && address >= 0x3000 ) + return spectranet_flash_rom_read( mapping, address ); } if( ttx2000s_paged && address >= 0x2000 ) @@ -506,6 +520,10 @@ writebyte_internal( libspectrum_word address, libspectrum_byte b ) /* all writes need to be parsed by the flash rom emulation */ spectranet_flash_rom_write(address, b); + if( spectranet_w5100_paged_0 && address < 0x1000 ) { + spectranet_w5100_write( mapping, address, b ); + return; + } if( spectranet_w5100_paged_a && address >= 0x1000 && address < 0x2000 ) { spectranet_w5100_write( mapping, address, b ); return; @@ -514,6 +532,14 @@ writebyte_internal( libspectrum_word address, libspectrum_byte b ) spectranet_w5100_write( mapping, address, b ); return; } + if( spectranet_w5100_paged_3 && address >= 0x3000 ) { + spectranet_w5100_write( mapping, address, b ); + return; + } + if( spectranet_xfs_paged_0 && address < 0x1000 ) { + spectranet_xfs_write( mapping, address, b ); + return; + } if( spectranet_xfs_paged_a && address >= 0x1000 && address < 0x2000 ) { spectranet_xfs_write( mapping, address, b ); return; @@ -522,6 +548,14 @@ writebyte_internal( libspectrum_word address, libspectrum_byte b ) spectranet_xfs_write( mapping, address, b ); return; } + if( spectranet_xfs_paged_3 && address >= 0x3000 ) { + spectranet_xfs_write( mapping, address, b ); + return; + } + if( spectranet_spectranext_config_paged_0 && address < 0x1000 ) { + spectranet_spectranext_config_write( mapping, address, b ); + return; + } if( spectranet_spectranext_config_paged_a && address >= 0x1000 && address < 0x2000 ) { spectranet_spectranext_config_write( mapping, address, b ); return; @@ -530,6 +564,10 @@ writebyte_internal( libspectrum_word address, libspectrum_byte b ) spectranet_spectranext_config_write( mapping, address, b ); return; } + if( spectranet_spectranext_config_paged_3 && address >= 0x3000 ) { + spectranet_spectranext_config_write( mapping, address, b ); + return; + } } if( ttx2000s_paged ) { diff --git a/peripherals/Makefile.am b/peripherals/Makefile.am index e2ab6a8d8..93c7497ec 100644 --- a/peripherals/Makefile.am +++ b/peripherals/Makefile.am @@ -65,14 +65,6 @@ if BUILD_SPECCYBOOT fuse_SOURCES += peripherals/nic/enc28j60.c endif -# The xfs core (RAM-backed filesystem engine) is always built: the GDB vfile -# debugger feature, which is compiled unconditionally, depends on it. Only the -# network engines (xfs_https.c) and their HTTP/TLS/SSH stack are Spectranet-only. -fuse_SOURCES += \ - peripherals/fs/xfs.c \ - peripherals/fs/xfs_worker.c \ - peripherals/fs/xfs_fs.c - if BUILD_SPECTRANET fuse_SOURCES += \ peripherals/flash/am29f010.c \ @@ -92,7 +84,15 @@ fuse_SOURCES += \ peripherals/nic/engines/parson.c \ peripherals/nic/spectranext_controller.c \ peripherals/nic/spectranext_stdout.c \ + peripherals/fs/xfs.c \ + peripherals/fs/xfs_compat.c \ + peripherals/fs/xfs_worker.c \ + peripherals/fs/xfs_fs.c \ + peripherals/fs/xfs_overlay.c \ + peripherals/fs/xfs_romfs.c \ + peripherals/fs/ramfs.c \ peripherals/fs/xfs_https.c \ + peripherals/fs/xfs_https_compat.c \ peripherals/http/httpc.c \ peripherals/http/http_sck.c \ peripherals/security/tls.c \ diff --git a/peripherals/fs/ramfs.c b/peripherals/fs/ramfs.c new file mode 100644 index 000000000..b9a74ba76 --- /dev/null +++ b/peripherals/fs/ramfs.c @@ -0,0 +1,145 @@ +#include "ramfs.h" + +#include +#include + +static uint32_t read_u32(uint32_t value) +{ + return value; +} + +static uint16_t read_u16(uint16_t value) +{ + return value; +} + +static void normalize_path(const char* in, char* out, size_t out_size) +{ + if (!out || out_size == 0) + return; + + if (!in || in[0] == '\0' || strcmp(in, "/") == 0) + { + strncpy(out, "/", out_size - 1); + out[out_size - 1] = '\0'; + return; + } + + size_t pos = 0; + out[pos++] = '/'; + while (*in == '/') + in++; + while (*in && pos + 1 < out_size) + { + out[pos++] = *in++; + } + while (pos > 1 && out[pos - 1] == '/') + pos--; + out[pos] = '\0'; +} + +static uint8_t entry_full_path(const ramfs_entry_t* entry, char* out, size_t out_size) +{ + if (!entry || !out || out_size == 0) + return 0; + if (strncmp(entry->parent, "/", sizeof(entry->parent)) == 0) + { + int n = snprintf(out, out_size, "/%s", entry->name); + return n > 0 && (size_t)n < out_size; + } + int n = snprintf(out, out_size, "%s/%s", entry->parent, entry->name); + return n > 0 && (size_t)n < out_size; +} + +uint8_t ramfs_mount(const uint8_t* start, const uint8_t* end, ramfs_t* fs) +{ + if (!start || !end || !fs || end < start || (size_t)(end - start) < sizeof(ramfs_header_t)) + return 0; + + memset(fs, 0, sizeof(*fs)); + fs->start = start; + fs->size = (size_t)(end - start); + fs->header = (const ramfs_header_t*)start; + + if (read_u32(fs->header->magic) != RAMFS_MAGIC || + read_u16(fs->header->version) != RAMFS_VERSION || + read_u16(fs->header->entry_size) != sizeof(ramfs_entry_t)) + { + return 0; + } + + const uint32_t entry_count = read_u32(fs->header->entry_count); + const uint32_t data_offset = read_u32(fs->header->data_offset); + const uint32_t data_size = read_u32(fs->header->data_size); + const size_t table_end = sizeof(ramfs_header_t) + (size_t)entry_count * sizeof(ramfs_entry_t); + if (table_end > fs->size || data_offset < table_end || (size_t)data_offset + data_size > fs->size) + return 0; + + fs->entries = (const ramfs_entry_t*)(start + sizeof(ramfs_header_t)); + fs->data = start + data_offset; + return 1; +} + +const ramfs_entry_t* ramfs_find(const ramfs_t* fs, const char* path) +{ + if (!fs || !fs->entries) + return NULL; + + char wanted[XFS_PATH_MAX]; + char current[XFS_PATH_MAX]; + normalize_path(path, wanted, sizeof(wanted)); + if (strcmp(wanted, "/") == 0) + return NULL; + + for (uint32_t i = 0; i < read_u32(fs->header->entry_count); ++i) + { + if (!entry_full_path(&fs->entries[i], current, sizeof(current))) + continue; + if (strcmp(current, wanted) == 0) + return &fs->entries[i]; + } + return NULL; +} + +uint8_t ramfs_opendir(const ramfs_t* fs, const char* path, ramfs_dir_t* dir) +{ + if (!fs || !fs->entries || !dir) + return 0; + + normalize_path(path, dir->path, sizeof(dir->path)); + if (strcmp(dir->path, "/") != 0) + { + const ramfs_entry_t* entry = ramfs_find(fs, dir->path); + if (!entry || entry->type != RAMFS_TYPE_DIR) + return 0; + } + dir->index = 0; + return 1; +} + +const ramfs_entry_t* ramfs_readdir(const ramfs_t* fs, ramfs_dir_t* dir) +{ + if (!fs || !fs->entries || !dir) + return NULL; + + const uint32_t count = read_u32(fs->header->entry_count); + while (dir->index < count) + { + const ramfs_entry_t* entry = &fs->entries[dir->index++]; + if (strncmp(entry->parent, dir->path, sizeof(entry->parent)) == 0) + return entry; + } + return NULL; +} + +const uint8_t* ramfs_file_data(const ramfs_t* fs, const ramfs_entry_t* entry) +{ + if (!fs || !entry || entry->type != RAMFS_TYPE_REG) + return NULL; + + const uint32_t offset = read_u32(entry->offset); + const uint32_t size = read_u32(entry->size); + if ((size_t)offset + size > read_u32(fs->header->data_size)) + return NULL; + return fs->data + offset; +} diff --git a/peripherals/fs/ramfs.h b/peripherals/fs/ramfs.h new file mode 100644 index 000000000..3841730ed --- /dev/null +++ b/peripherals/fs/ramfs.h @@ -0,0 +1,59 @@ +#pragma once + +#include +#include + +#include "xfs.h" + +#define RAMFS_MAGIC 0x46524e53u +#define RAMFS_VERSION 1 +#define RAMFS_NAME_MAX 64 +#define RAMFS_PARENT_MAX 128 + +enum ramfs_entry_type +{ + RAMFS_TYPE_REG = 1, + RAMFS_TYPE_DIR = 2, +}; + +typedef struct __attribute__((packed)) +{ + uint32_t magic; + uint16_t version; + uint16_t entry_size; + uint32_t entry_count; + uint32_t data_offset; + uint32_t data_size; +} ramfs_header_t; + +typedef struct __attribute__((packed)) +{ + char parent[RAMFS_PARENT_MAX]; + char name[RAMFS_NAME_MAX]; + uint8_t type; + uint8_t reserved[3]; + uint32_t offset; + uint32_t size; + uint32_t mtime; +} ramfs_entry_t; + +typedef struct +{ + const uint8_t* start; + size_t size; + const ramfs_header_t* header; + const ramfs_entry_t* entries; + const uint8_t* data; +} ramfs_t; + +typedef struct +{ + uint32_t index; + char path[XFS_PATH_MAX]; +} ramfs_dir_t; + +uint8_t ramfs_mount(const uint8_t* start, const uint8_t* end, ramfs_t* fs); +const ramfs_entry_t* ramfs_find(const ramfs_t* fs, const char* path); +uint8_t ramfs_opendir(const ramfs_t* fs, const char* path, ramfs_dir_t* dir); +const ramfs_entry_t* ramfs_readdir(const ramfs_t* fs, ramfs_dir_t* dir); +const uint8_t* ramfs_file_data(const ramfs_t* fs, const ramfs_entry_t* entry); diff --git a/peripherals/fs/xfs.c b/peripherals/fs/xfs.c index 126b233fb..695c7e212 100644 --- a/peripherals/fs/xfs.c +++ b/peripherals/fs/xfs.c @@ -7,7 +7,7 @@ struct xfs_engine_mount_t xfs_mounted_engines[4] = {0}; // Handles array - shared between task and emulator -struct xfs_handle_t xfs_handles[XFS_MAX_FDS] = {0}; +struct xfs_handle_t xfs_handles[XFS_MAX_FDS] = {}; // Helper functions static inline struct xfs_handle_t* get_handle(uint8_t handle) @@ -53,6 +53,109 @@ static inline bool ensure_mounted(const uint8_t mount_point) return (xfs_mounted_engines[mount_point].engine != NULL); } +static void xfs_set_root_cwd(struct xfs_engine_mount_t* mount) +{ + if (!mount->cwd) + { + return; + } + mount->cwd[0] = '/'; + mount->cwd[1] = '\0'; +} + +static int16_t xfs_resolve_path(const struct xfs_engine_mount_t* mount, const char* path, + char* out, const size_t out_size) +{ + if (!path || !out || out_size < 2) + { + return XFS_ERR_INVAL; + } + + const char* cwd = (mount && mount->cwd && mount->cwd[0]) ? mount->cwd : "/"; + + char combined[XFS_PATH_MAX]; + int written; + if (path[0] == '/') + { + written = snprintf(combined, sizeof(combined), "%s", path); + } + else if (cwd[0] == '/' && cwd[1] == '\0') + { + written = snprintf(combined, sizeof(combined), "/%s", path); + } + else + { + written = snprintf(combined, sizeof(combined), "%s/%s", cwd, path); + } + if (written < 0 || (size_t)written >= sizeof(combined)) + { + return XFS_ERR_NAMETOOLONG; + } + + size_t out_len = 0; + out[out_len++] = '/'; + out[out_len] = '\0'; + + char* segment = combined; + while (*segment) + { + while (*segment == '/') + { + segment++; + } + if (!*segment) + { + break; + } + + char* next = segment; + while (*next && *next != '/') + { + next++; + } + + const size_t len = (size_t)(next - segment); + if (len == 1 && segment[0] == '.') + { + /* Stay in the current directory. */ + } + else if (len == 2 && segment[0] == '.' && segment[1] == '.') + { + if (out_len > 1) + { + out_len--; + while (out_len > 1 && out[out_len - 1] != '/') + { + out_len--; + } + out[out_len] = '\0'; + } + } + else + { + if (out_len > 1) + { + if (out_len + 1 >= out_size) + { + return XFS_ERR_NAMETOOLONG; + } + out[out_len++] = '/'; + } + if (out_len + len >= out_size) + { + return XFS_ERR_NAMETOOLONG; + } + memcpy(out + out_len, segment, len); + out_len += len; + out[out_len] = '\0'; + } + + segment = next; + } + + return XFS_ERR_OK; +} + /** * Handle XFS mount command */ @@ -87,7 +190,7 @@ void xfs_handle_mount(volatile struct xfs_registers_t* registers) return; } - struct xfs_engine_t* engine = NULL; + const struct xfs_engine_t* engine = NULL; if (strcmp(protocol, "xfs") == 0) { @@ -95,7 +198,7 @@ void xfs_handle_mount(volatile struct xfs_registers_t* registers) if (strcmp(hostname, "ram") == 0 && (path[0] == '\0' || strcmp(path, "/") == 0)) { - engine = &xfs_ram_engine; + engine = &xfs_overlay_engine; } else { @@ -105,9 +208,6 @@ void xfs_handle_mount(volatile struct xfs_registers_t* registers) return; } } -#ifdef BUILD_SPECTRANET - /* The http/https engines live in xfs_https.c, which is built only with - Spectranet as it needs the HTTP client and the mbedTLS stack. */ else if (strcmp(protocol, "https") == 0) { XFS_DEBUG("xfs: mount https hostname='%s' path='%s' mount_point=%d\n", hostname, path, mount_point); @@ -118,7 +218,6 @@ void xfs_handle_mount(volatile struct xfs_registers_t* registers) XFS_DEBUG("xfs: mount http hostname='%s' path='%s' mount_point=%d\n", hostname, path, mount_point); engine = &http_engine; } -#endif /* #ifdef BUILD_SPECTRANET */ else { XFS_DEBUG("xfs: mount failed: unknown protocol '%s' mount_point=%d\n", protocol, mount_point); @@ -137,6 +236,8 @@ void xfs_handle_mount(volatile struct xfs_registers_t* registers) else { xfs_mounted_engines[mount_point].engine = engine; + xfs_mounted_engines[mount_point].cwd = xfs_compat_get_cwd_buffer(mount_point); + xfs_set_root_cwd(&xfs_mounted_engines[mount_point]); XFS_DEBUG("xfs: mount success mount_point=%d\n", mount_point); registers->result = 0; registers->status = XFS_STATUS_COMPLETE; @@ -189,11 +290,12 @@ void xfs_handle_umount(volatile struct xfs_registers_t* registers) return; } - struct xfs_engine_t* const eng = xfs_mounted_engines[mount_point].engine; + const struct xfs_engine_t* const eng = xfs_mounted_engines[mount_point].engine; if (eng->unmount) eng->unmount(eng, &xfs_mounted_engines[mount_point]); xfs_mounted_engines[mount_point].engine = NULL; + xfs_mounted_engines[mount_point].cwd = NULL; XFS_DEBUG("xfs: umount success mount_point=%d\n", mount_point); registers->result = 0; @@ -284,8 +386,18 @@ void xfs_handle_open(volatile struct xfs_registers_t* registers) struct xfs_handle_t* h = get_handle(handle); const struct xfs_engine_mount_t* mounted_engine = &xfs_mounted_engines[mount_point]; + char resolved_path[XFS_PATH_MAX]; + int16_t err = xfs_resolve_path(mounted_engine, path, resolved_path, sizeof(resolved_path)); + if (err) + { + XFS_DEBUG("xfs: open path resolution failed: result=%d\n", err); + free_handle(handle, mount_point); + registers->result = err; + registers->status = XFS_STATUS_ERROR; + return; + } - const int16_t err = mounted_engine->engine->open(mounted_engine, h, path, xfs_flags); + err = mounted_engine->engine->open(mounted_engine, h, resolved_path, xfs_flags); if (err) { @@ -297,7 +409,7 @@ void xfs_handle_open(volatile struct xfs_registers_t* registers) else { h->owner_mount = mount_point; - XFS_DEBUG("xfs: open success handle=%d\n", handle); + XFS_DEBUG("xfs: open success path=%s handle=%d\n", resolved_path, handle); registers->file_handle = handle; registers->result = 0; registers->status = XFS_STATUS_COMPLETE; @@ -441,11 +553,21 @@ void xfs_handle_opendir(volatile struct xfs_registers_t* registers) } struct xfs_handle_t* h = get_handle(handle); - const int16_t err = mounted_engine->engine->opendir(mounted_engine, h, path); + char resolved_path[XFS_PATH_MAX]; + int16_t err = xfs_resolve_path(mounted_engine, path, resolved_path, sizeof(resolved_path)); + if (err) + { + XFS_DEBUG("xfs: opendir path resolution failed: result=%d mount_point=%d\n", err, mount_point); + free_handle(handle, mount_point); + registers->result = err; + registers->status = XFS_STATUS_ERROR; + return; + } + err = mounted_engine->engine->opendir(mounted_engine, h, resolved_path); if (err) { - XFS_DEBUG("xfs: opendir %s failed: result=%d mount_point=%d\n", path, err, mount_point); + XFS_DEBUG("xfs: opendir %s failed: result=%d mount_point=%d\n", resolved_path, err, mount_point); free_handle(handle, mount_point); registers->result = err; registers->status = XFS_STATUS_ERROR; @@ -453,7 +575,10 @@ void xfs_handle_opendir(volatile struct xfs_registers_t* registers) else { h->owner_mount = mount_point; - XFS_DEBUG("xfs: opendir %s success handle=%d mount_point=%d\n", path, handle, mount_point); + h->dir_position = 0; + strncpy(h->dir_path, resolved_path, sizeof(h->dir_path) - 1); + h->dir_path[sizeof(h->dir_path) - 1] = '\0'; + XFS_DEBUG("xfs: opendir %s success handle=%d mount_point=%d\n", resolved_path, handle, mount_point); registers->result = 0; registers->file_handle = handle; registers->status = XFS_STATUS_COMPLETE; @@ -476,6 +601,48 @@ void xfs_handle_readdir(volatile struct xfs_registers_t* registers) return; } + if (registers->arguments.readdir.operation == XFS_READDIR_SEEK) + { + const uint32_t position = registers->arguments.readdir.position; + const int16_t err = mounted_engine->engine->seekdir(mounted_engine, h, position); + if (err != XFS_ERR_OK) + { + registers->result = err; + registers->status = XFS_STATUS_ERROR; + return; + } + h->dir_position = position; + registers->arguments.readdir.position = position; + registers->result = 0; + registers->status = XFS_STATUS_COMPLETE; + return; + } + + if (registers->arguments.readdir.operation == XFS_READDIR_TELL) + { + const int16_t err = mounted_engine->engine->telldir( + mounted_engine, h, &h->dir_position); + if (err != XFS_ERR_OK) + { + registers->result = err; + registers->status = XFS_STATUS_ERROR; + return; + } + registers->arguments.readdir.position = h->dir_position; + registers->result = 0; + registers->status = XFS_STATUS_COMPLETE; + return; + } + + if (registers->arguments.readdir.operation != XFS_READDIR_NEXT) + { + XFS_DEBUG("xfs: readdir failed: invalid operation=%u\n", + registers->arguments.readdir.operation); + registers->result = XFS_ERR_INVAL; + registers->status = XFS_STATUS_ERROR; + return; + } + struct xfs_stat_info info = {0}; const int16_t err = mounted_engine->engine->readdir(mounted_engine, h, &info); @@ -510,6 +677,16 @@ void xfs_handle_readdir(volatile struct xfs_registers_t* registers) tail[7] = (uint8_t)((info.mtime >> 8) & 0xff); tail[8] = (uint8_t)((info.mtime >> 16) & 0xff); tail[9] = (uint8_t)((info.mtime >> 24) & 0xff); + const int16_t tell_err = mounted_engine->engine->telldir( + mounted_engine, h, &h->dir_position); + if (tell_err != XFS_ERR_OK) + { + XFS_DEBUG("xfs: telldir failed: result=%d\n", tell_err); + registers->result = tell_err; + registers->status = XFS_STATUS_ERROR; + return; + } + registers->arguments.readdir.position = h->dir_position; registers->result = 0; } registers->status = XFS_STATUS_COMPLETE; @@ -564,8 +741,18 @@ void xfs_handle_stat(volatile struct xfs_registers_t* registers) return; } + char resolved_path[XFS_PATH_MAX]; + int16_t err = xfs_resolve_path(mounted_engine, path, resolved_path, sizeof(resolved_path)); + if (err) + { + XFS_DEBUG("xfs: stat path resolution failed: result=%d\n", err); + registers->result = err; + registers->status = XFS_STATUS_ERROR; + return; + } + struct xfs_stat_info info = {0}; - const int16_t err = mounted_engine->engine->stat(mounted_engine, path, &info); + err = mounted_engine->engine->stat(mounted_engine, resolved_path, &info); if (err) { @@ -594,7 +781,7 @@ void xfs_handle_stat(volatile struct xfs_registers_t* registers) uint8_t* strings = (uint8_t*)registers->workspace + 22; strings[0] = 0; strings[1] = 0; - XFS_DEBUG("xfs: stat success size=%lu mode=0x%04x\n", info.size, stat->mode); + XFS_DEBUG("xfs: stat success path=%s size=%lu mode=0x%04x\n", resolved_path, info.size, stat->mode); registers->result = 0; registers->status = XFS_STATUS_COMPLETE; } @@ -615,7 +802,17 @@ void xfs_handle_unlink(volatile struct xfs_registers_t* registers) return; } - const int16_t err = mounted_engine->engine->unlink(mounted_engine, path); + char resolved_path[XFS_PATH_MAX]; + int16_t err = xfs_resolve_path(mounted_engine, path, resolved_path, sizeof(resolved_path)); + if (err) + { + XFS_DEBUG("xfs: unlink path resolution failed: result=%d\n", err); + registers->result = err; + registers->status = XFS_STATUS_ERROR; + return; + } + + err = mounted_engine->engine->unlink(mounted_engine, resolved_path); if (err) { @@ -625,7 +822,7 @@ void xfs_handle_unlink(volatile struct xfs_registers_t* registers) } else { - XFS_DEBUG("xfs: unlink success\n"); + XFS_DEBUG("xfs: unlink success path=%s\n", resolved_path); registers->result = 0; registers->status = XFS_STATUS_COMPLETE; } @@ -646,7 +843,17 @@ void xfs_handle_mkdir(volatile struct xfs_registers_t* registers) return; } - const int16_t err = mounted_engine->engine->mkdir(mounted_engine, path); + char resolved_path[XFS_PATH_MAX]; + int16_t err = xfs_resolve_path(mounted_engine, path, resolved_path, sizeof(resolved_path)); + if (err) + { + XFS_DEBUG("xfs: mkdir path resolution failed: result=%d\n", err); + registers->result = err; + registers->status = XFS_STATUS_ERROR; + return; + } + + err = mounted_engine->engine->mkdir(mounted_engine, resolved_path); if (err) { @@ -656,7 +863,7 @@ void xfs_handle_mkdir(volatile struct xfs_registers_t* registers) } else { - XFS_DEBUG("xfs: mkdir success\n"); + XFS_DEBUG("xfs: mkdir success path=%s\n", resolved_path); registers->result = 0; registers->status = XFS_STATUS_COMPLETE; } @@ -677,7 +884,17 @@ void xfs_handle_rmdir(volatile struct xfs_registers_t* registers) return; } - const int16_t err = mounted_engine->engine->rmdir(mounted_engine, path); + char resolved_path[XFS_PATH_MAX]; + int16_t err = xfs_resolve_path(mounted_engine, path, resolved_path, sizeof(resolved_path)); + if (err) + { + XFS_DEBUG("xfs: rmdir path resolution failed: result=%d\n", err); + registers->result = err; + registers->status = XFS_STATUS_ERROR; + return; + } + + err = mounted_engine->engine->rmdir(mounted_engine, resolved_path); if (err) { @@ -687,7 +904,7 @@ void xfs_handle_rmdir(volatile struct xfs_registers_t* registers) } else { - XFS_DEBUG("xfs: rmdir success\n"); + XFS_DEBUG("xfs: rmdir success path=%s\n", resolved_path); registers->result = 0; registers->status = XFS_STATUS_COMPLETE; } @@ -698,7 +915,7 @@ void xfs_handle_chdir(volatile struct xfs_registers_t* registers) const char* path = (const char*)registers->arguments.chdir.path; const uint8_t mount_point = registers->mount_point; const struct xfs_engine_mount_t* mounted_engine = &xfs_mounted_engines[mount_point]; - XFS_DEBUG("xfs: chdir path=%s (not supported by littlefs)\n", path); + XFS_DEBUG("xfs: chdir path=%s\n", path); if (!ensure_mounted(mount_point)) { @@ -708,8 +925,27 @@ void xfs_handle_chdir(volatile struct xfs_registers_t* registers) return; } + char resolved_path[XFS_PATH_MAX]; + int16_t err = xfs_resolve_path(mounted_engine, path, resolved_path, sizeof(resolved_path)); + if (err) + { + XFS_DEBUG("xfs: chdir path resolution failed: result=%d\n", err); + registers->result = err; + registers->status = XFS_STATUS_ERROR; + return; + } + struct xfs_stat_info info; - const int err = mounted_engine->engine->stat(mounted_engine, path, &info); + if (strcmp(resolved_path, "/") == 0) + { + memset(&info, 0, sizeof(info)); + info.type = XFS_TYPE_DIR; + err = XFS_ERR_OK; + } + else + { + err = mounted_engine->engine->stat(mounted_engine, resolved_path, &info); + } if (err || info.type != XFS_TYPE_DIR) { @@ -719,7 +955,8 @@ void xfs_handle_chdir(volatile struct xfs_registers_t* registers) } else { - XFS_DEBUG("xfs: chdir success (path verified)\n"); + snprintf(xfs_mounted_engines[mount_point].cwd, XFS_PATH_MAX, "%s", resolved_path); + XFS_DEBUG("xfs: chdir success cwd=%s\n", xfs_mounted_engines[mount_point].cwd); registers->result = 0; registers->status = XFS_STATUS_COMPLETE; } @@ -728,9 +965,6 @@ void xfs_handle_chdir(volatile struct xfs_registers_t* registers) void xfs_handle_getcwd(volatile struct xfs_registers_t* registers) { const uint8_t mount_point = registers->mount_point; - const struct xfs_engine_mount_t* mounted_engine = &xfs_mounted_engines[mount_point]; - - XFS_DEBUG("xfs: getcwd (littlefs always returns root)\n"); if (!ensure_mounted(mount_point)) { XFS_DEBUG("xfs: getcwd failed: not mounted\n"); @@ -741,15 +975,16 @@ void xfs_handle_getcwd(volatile struct xfs_registers_t* registers) char* path = (char*)registers->workspace; uint16_t len = registers->arguments.getcwd.buffer_size; - - int16_t err = mounted_engine->engine->getcwd(mounted_engine, path, len); - if (err) + + if (len == 0) { - registers->result = err; + registers->result = XFS_ERR_INVAL; registers->status = XFS_STATUS_ERROR; return; } - + + const char* cwd = xfs_mounted_engines[mount_point].cwd ? xfs_mounted_engines[mount_point].cwd : "/"; + snprintf(path, len, "%s", cwd); XFS_DEBUG("xfs: getcwd success path=%s\n", path); registers->result = 0; registers->status = XFS_STATUS_COMPLETE; @@ -772,7 +1007,22 @@ void xfs_handle_rename(volatile struct xfs_registers_t* registers) return; } - const int16_t err = mounted_engine->engine->rename(mounted_engine, old_path, new_path); + char resolved_old_path[XFS_PATH_MAX]; + char resolved_new_path[XFS_PATH_MAX]; + int16_t err = xfs_resolve_path(mounted_engine, old_path, resolved_old_path, sizeof(resolved_old_path)); + if (!err) + { + err = xfs_resolve_path(mounted_engine, new_path, resolved_new_path, sizeof(resolved_new_path)); + } + if (err) + { + XFS_DEBUG("xfs: rename path resolution failed: result=%d\n", err); + registers->result = err; + registers->status = XFS_STATUS_ERROR; + return; + } + + err = mounted_engine->engine->rename(mounted_engine, resolved_old_path, resolved_new_path); if (err) { @@ -782,7 +1032,7 @@ void xfs_handle_rename(volatile struct xfs_registers_t* registers) } else { - XFS_DEBUG("xfs: rename success\n"); + XFS_DEBUG("xfs: rename success old=%s new=%s\n", resolved_old_path, resolved_new_path); registers->result = 0; registers->status = XFS_STATUS_COMPLETE; } @@ -813,7 +1063,17 @@ void xfs_handle_chmod(volatile struct xfs_registers_t* registers) return; } - const int16_t err = mounted_engine->engine->chmod(mounted_engine, path, mode); + char resolved_path[XFS_PATH_MAX]; + int16_t err = xfs_resolve_path(mounted_engine, path, resolved_path, sizeof(resolved_path)); + if (err) + { + XFS_DEBUG("xfs: chmod path resolution failed: result=%d\n", err); + registers->result = err; + registers->status = XFS_STATUS_ERROR; + return; + } + + err = mounted_engine->engine->chmod(mounted_engine, resolved_path, mode); if (err) { diff --git a/peripherals/fs/xfs.h b/peripherals/fs/xfs.h index fa57f7aa0..a959fec33 100644 --- a/peripherals/fs/xfs.h +++ b/peripherals/fs/xfs.h @@ -6,6 +6,8 @@ #include #define XFS_SPECTRANET_PAGE (0x49) +#define XFS_PATH_MAX (256) +#define XFS_OVERLAY_MAX_LAYERS 4 // XFS error codes (mapped from LittleFS error codes) enum xfs_error { @@ -83,15 +85,20 @@ struct xfs_handle_t; struct xfs_engine_mount_t { - struct xfs_engine_t* engine; + const struct xfs_engine_t* engine; void* mount_data; + char* cwd; }; +#ifndef FS_STORAGE_ENUM_DEFINED +#define FS_STORAGE_ENUM_DEFINED enum { FS_STORAGE_RAM = 0, FS_STORAGE_FLASH = 1, + FS_STORAGE_SYSTEM = 2 }; +#endif struct xfs_stat_info { @@ -130,6 +137,8 @@ struct xfs_engine_t // Directory operations int16_t (*opendir)(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle, const char* path); int16_t (*readdir)(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle, struct xfs_stat_info* info); + int16_t (*telldir)(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle, uint32_t* position); + int16_t (*seekdir)(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle, uint32_t position); int16_t (*closedir)(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle); // Path operations @@ -146,6 +155,30 @@ struct xfs_engine_t void (*free_handle)(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle); }; +typedef struct +{ + const struct xfs_engine_t* engine; + const char* hostname; + const char* path; +} xfs_overlay_layer_config_t; + +typedef struct +{ + const xfs_overlay_layer_config_t* layers[XFS_OVERLAY_MAX_LAYERS + 1]; + const xfs_overlay_layer_config_t* default_layer; +} xfs_overlay_config_t; + +typedef struct +{ + const uint8_t* start; + const uint8_t* end; + const char* name; + uint8_t storage; +} xfs_romfs_config_t; + +extern const xfs_overlay_config_t xfs_default_overlay; +extern xfs_romfs_config_t xfs_default_romfs; + enum xfs_handle_type_t { XFS_HANDLE_TYPE_NONE = 0, @@ -165,6 +198,8 @@ struct xfs_handle_t enum xfs_handle_type_t type; /** Mount point this handle belongs to (0–3); 0xFF when unallocated. */ uint8_t owner_mount; + uint32_t dir_position; + char dir_path[XFS_PATH_MAX]; void* data; }; @@ -202,6 +237,20 @@ struct xfs_args_opendir_t char path[256]; }; +struct xfs_args_readdir_t +{ + uint32_t position; + uint8_t operation; + uint8_t reserved[251]; +}; + +enum xfs_readdir_operation_t +{ + XFS_READDIR_NEXT = 0, + XFS_READDIR_SEEK = 1, + XFS_READDIR_TELL = 2, +}; + struct xfs_args_stat_t { char path[256]; @@ -274,6 +323,7 @@ union xfs_arguments_t struct xfs_args_read_t read; struct xfs_args_write_t write; struct xfs_args_opendir_t opendir; + struct xfs_args_readdir_t readdir; struct xfs_args_stat_t stat; struct xfs_args_unlink_t unlink; struct xfs_args_mkdir_t mkdir; @@ -328,6 +378,9 @@ _Static_assert(0x200 == offsetof(struct xfs_registers_t, workspace), "workspace _Static_assert(0x008 == offsetof(struct xfs_registers_t, arguments), "arguments is not at 0x008"); extern void xfs_init(); +/** Serialize access to XFS mounts and handle state. */ +extern void xfs_lock(void); +extern void xfs_unlock(void); extern void xfs_reset(void); /** Close all XFS handles for this mount (call from engine unmount; idempotent if already empty). */ @@ -337,7 +390,10 @@ void xfs_close_handles_for_mount(const struct xfs_engine_mount_t *mount); extern void xfs_debug_enable(bool enable); extern bool xfs_debug_is_enabled(void); extern void xfs_debug_log(const char *format, ...); -#define XFS_DEBUG(...) do { if( xfs_debug_is_enabled() ) xfs_debug_log( __VA_ARGS__ ); } while(0) +#define XFS_DEBUG(...) do { if (xfs_debug_is_enabled()) xfs_debug_log(__VA_ARGS__); } while(0) + +char* xfs_compat_get_cwd_buffer(uint8_t mount_point); +void xfs_compat_init(void); // Command handlers (FreeRTOS-independent, usable in emulator) extern void xfs_handle_command(volatile struct xfs_registers_t* registers); diff --git a/peripherals/fs/xfs_compat.c b/peripherals/fs/xfs_compat.c new file mode 100644 index 000000000..e1aa9519b --- /dev/null +++ b/peripherals/fs/xfs_compat.c @@ -0,0 +1,101 @@ +#include "config.h" + +#include "xfs.h" +#include "xfs_engines.h" + +#include +#include +#include + +#include "debugger/gdbserver.h" +#include "utils.h" + +static char xfs_cwd_buffers[4][XFS_PATH_MAX]; +static utils_file xfs_romfs_file = { 0 }; +static bool xfs_romfs_loaded = false; + +static const xfs_overlay_layer_config_t xfs_romfs_layer = { + .engine = &xfs_romfs_engine, + .hostname = "romfs", + .path = "/", +}; + +static const xfs_overlay_layer_config_t xfs_ram_layer = { + .engine = &xfs_ram_engine, + .hostname = "ram", + .path = "/", +}; + +xfs_romfs_config_t xfs_default_romfs = { + .start = NULL, + .end = NULL, + .name = "romfs", + /* Match the controller: ROMFS is the immutable system layer, not a + * user-writable flash filesystem. Overlay policy distinguishes it. */ + .storage = FS_STORAGE_SYSTEM, +}; + +const xfs_overlay_config_t xfs_default_overlay = { + .layers = { &xfs_ram_layer, &xfs_romfs_layer, NULL }, + .default_layer = &xfs_ram_layer, +}; + +static bool xfs_compat_load_romfs_file(const char* path) +{ + utils_file file = { 0 }; + if (utils_read_file(path, &file) != 0) + return false; + + xfs_romfs_file = file; + xfs_default_romfs.start = xfs_romfs_file.buffer; + xfs_default_romfs.end = xfs_romfs_file.buffer + xfs_romfs_file.length; + xfs_romfs_loaded = true; + return true; +} + +void xfs_compat_init(void) +{ + if (xfs_romfs_loaded) + return; + + utils_file file = { 0 }; + if (utils_read_auxiliary_file("spxromfs.bin", &file, UTILS_AUXILIARY_ROM) == 0) + { + xfs_romfs_file = file; + xfs_default_romfs.start = xfs_romfs_file.buffer; + xfs_default_romfs.end = xfs_romfs_file.buffer + xfs_romfs_file.length; + xfs_romfs_loaded = true; + } + else if (!xfs_compat_load_romfs_file("fuse/roms/spxromfs.bin") && + !xfs_compat_load_romfs_file("../roms/spxromfs.bin") && + !xfs_compat_load_romfs_file("roms/spxromfs.bin")) + { + XFS_DEBUG("xfs: spxromfs.bin not found; ROMFS overlay disabled\n"); + } +} + +char* xfs_compat_get_cwd_buffer(uint8_t mount_point) +{ + if (mount_point >= 4) + { + return NULL; + } + + return xfs_cwd_buffers[mount_point]; +} + +void xfs_debug_log(const char *format, ...) +{ + va_list args; + va_list remote_args; + char buffer[1024]; + + va_start(args, format); + va_copy(remote_args, args); + vprintf(format, args); + vsnprintf(buffer, sizeof(buffer), format, remote_args); + va_end(remote_args); + va_end(args); + + gdbserver_send_remote_console_output(buffer); +} diff --git a/peripherals/fs/xfs_engines.h b/peripherals/fs/xfs_engines.h index 26214a117..e81efa662 100644 --- a/peripherals/fs/xfs_engines.h +++ b/peripherals/fs/xfs_engines.h @@ -2,6 +2,8 @@ #include "xfs.h" -extern struct xfs_engine_t http_engine; -extern struct xfs_engine_t https_engine; -extern struct xfs_engine_t xfs_ram_engine; +extern const struct xfs_engine_t https_engine; +extern const struct xfs_engine_t http_engine; +extern const struct xfs_engine_t xfs_romfs_engine; +extern const struct xfs_engine_t xfs_ram_engine; +extern const struct xfs_engine_t xfs_overlay_engine; diff --git a/peripherals/fs/xfs_fs.c b/peripherals/fs/xfs_fs.c index e28890395..f20fdf18c 100644 --- a/peripherals/fs/xfs_fs.c +++ b/peripherals/fs/xfs_fs.c @@ -84,6 +84,9 @@ struct xfs_fs_dir_handle_t { DIR *dir; char path[PATH_MAX]; + /* XFS exposes a logical cursor, whereas POSIX telldir cookies are opaque + * and can exceed 16 bits. Keep an XFS-visible logical entry index instead. */ + uint32_t position; }; static inline struct xfs_fs_mount_data_t* get_mount_data(const struct xfs_engine_mount_t* mount) @@ -345,6 +348,11 @@ static int16_t fs_opendir(const struct xfs_engine_mount_t* engine, struct xfs_ha if (!dir_handle) { return XFS_ERR_NOMEM; } + + /* Overlay cursors use the child engine's logical directory-entry index. + * This allocation is not zeroed, so leaving position unset leaks an + * allocator value through fs_telldir() and makes overlay reject entries. */ + dir_handle->position = 0; dir_handle->dir = opendir(full_path); @@ -373,7 +381,7 @@ static int16_t fs_readdir(const struct xfs_engine_mount_t* engine, struct xfs_ha struct dirent *entry; int err = 0; - // Read directory entries, skipping "." + // Read directory entries, skipping hidden dot entries but preserving parent navigation. errno = 0; do { @@ -386,8 +394,7 @@ static int16_t fs_readdir(const struct xfs_engine_mount_t* engine, struct xfs_ha } break; // End of directory or error } - // Skip "." entries - } while (strcmp(entry->d_name, ".") == 0); + } while (entry->d_name[0] == '.' && strcmp(entry->d_name, "..") != 0); if (err != 0) { @@ -437,9 +444,42 @@ static int16_t fs_readdir(const struct xfs_engine_mount_t* engine, struct xfs_ha } XFS_DEBUG("fs: readdir success name=%s type=%d\n", info->name, info->type); + if (dir_handle->position == UINT32_MAX) + return XFS_ERR_INVAL; + dir_handle->position++; return 1; // Success, not end of directory } +static int16_t fs_telldir(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle, uint32_t* position) +{ + (void)engine; + struct xfs_fs_dir_handle_t* dir_handle = get_dir_handle(handle); + if (!dir_handle || !position) + return XFS_ERR_BADF; + + *position = dir_handle->position; + return XFS_ERR_OK; +} + +static int16_t fs_seekdir(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle, uint32_t position) +{ + (void)engine; + struct xfs_fs_dir_handle_t* dir_handle = get_dir_handle(handle); + if (!dir_handle) + return XFS_ERR_BADF; + + rewinddir(dir_handle->dir); + dir_handle->position = 0; + struct xfs_stat_info ignored; + while (dir_handle->position < position) + { + const int16_t err = fs_readdir(engine, handle, &ignored); + if (err <= 0) + return err < 0 ? err : XFS_ERR_INVAL; + } + return XFS_ERR_OK; +} + // Close directory static int16_t fs_closedir(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle) { @@ -652,7 +692,7 @@ static void fs_free_handle(const struct xfs_engine_mount_t* engine, struct xfs_h } // XFS filesystem engine -struct xfs_engine_t xfs_ram_engine = { +const struct xfs_engine_t xfs_ram_engine = { .user = NULL, .mount = fs_mount, .is_mounted = fs_is_mounted, @@ -665,6 +705,8 @@ struct xfs_engine_t xfs_ram_engine = { .lseek = fs_lseek, .opendir = fs_opendir, .readdir = fs_readdir, + .telldir = fs_telldir, + .seekdir = fs_seekdir, .closedir = fs_closedir, .stat = fs_stat, .unlink = fs_unlink, diff --git a/peripherals/fs/xfs_https.c b/peripherals/fs/xfs_https.c index 2edf0908c..42bd8556a 100644 --- a/peripherals/fs/xfs_https.c +++ b/peripherals/fs/xfs_https.c @@ -1,20 +1,10 @@ -#include "config.h" - #include "xfs.h" -#include "xfs_worker.h" +#include "xfs_https_compat.h" +#include #include #include #include -#include -#include -#include -#include -#include - -#include "libspectrum.h" -#include "../http/httpc.h" -#include "../http/http_sck.h" struct xfs_handle_https_file_t { @@ -72,18 +62,9 @@ struct https_engine_mount_data_t static inline struct https_engine_mount_data_t* get_mount_data(const struct xfs_engine_mount_t* engine_mount) { - return (struct https_engine_mount_data_t*)engine_mount->mount_data; + return engine_mount->mount_data; } -// Structure to hold buffer information during download -struct https_buffer_info_t -{ - void* data; // Buffer pointer - size_t size; // Current buffer size - size_t capacity; // Current buffer capacity - size_t expected_size; // Fixed response size when provided -}; - // Helper function to build full URL from base URL + path // base_url should be the mount URL (e.g., "https://hostname/path/") // path is the relative path to append @@ -195,10 +176,10 @@ static void https_cache_free_entries(struct https_dir_cache_entry_t* cache_entry { if (cache_entry->dir_entries[i]) { - libspectrum_free(cache_entry->dir_entries[i]); + xfs_https_free(cache_entry->dir_entries[i]); } } - libspectrum_free(cache_entry->dir_entries); + xfs_https_free(cache_entry->dir_entries); cache_entry->dir_entries = NULL; cache_entry->dir_entries_count = 0; } @@ -210,7 +191,7 @@ static struct xfs_handle_https_dir_entry_t* https_cache_copy_entry(const struct return NULL; } - struct xfs_handle_https_dir_entry_t* dst = libspectrum_malloc(sizeof(struct xfs_handle_https_dir_entry_t)); + struct xfs_handle_https_dir_entry_t* dst = xfs_https_alloc(sizeof(struct xfs_handle_https_dir_entry_t)); if (!dst) { @@ -233,7 +214,7 @@ static void https_cache_put_entries(const struct xfs_engine_mount_t* engine, con struct https_engine_mount_data_t* mount_data = get_mount_data(engine); int cache_idx = -1; - int i; + uint8_t i; for (i = 0; i < HTTPS_DIR_CACHE_SIZE; i++) { @@ -270,7 +251,7 @@ static void https_cache_put_entries(const struct xfs_engine_mount_t* engine, con mount_data->https_dir_cache[cache_idx].path[path_len] = '\0'; // Allocate array for cached entries - mount_data->https_dir_cache[cache_idx].dir_entries = (struct xfs_handle_https_dir_entry_t**)malloc( + mount_data->https_dir_cache[cache_idx].dir_entries = (struct xfs_handle_https_dir_entry_t**)xfs_https_alloc( count * sizeof(struct xfs_handle_https_dir_entry_t*)); if (!mount_data->https_dir_cache[cache_idx].dir_entries) @@ -350,69 +331,6 @@ static void https_cache_store_entries(const struct xfs_engine_mount_t* engine, count, dir_path, cache_idx); } -// Callback function for httpc_get to write downloaded data to buffer -static int write_buffer_callback(void *param, unsigned char *buf, size_t length, size_t position, size_t content_length) -{ - XFS_DEBUG("https: write_buffer_callback ENTRY param=%p buf=%p length=%zu position=%zu content_length=%zu\n", - param, (void*)buf, length, position, content_length); - - struct https_buffer_info_t* buffer_info = (struct https_buffer_info_t*)param; - if (content_length > 0 && buffer_info->expected_size == 0) - { - buffer_info->expected_size = content_length; - } - - // If we know the content length, pre-allocate buffer - if (content_length > 0 && buffer_info->capacity == 0) - { - buffer_info->capacity = content_length; - buffer_info->data = libspectrum_malloc(content_length); - if (!buffer_info->data) - { - XFS_DEBUG("https: write_buffer_callback [ERROR] failed to allocate buffer of size %zu\n", content_length); - return -1; - } - buffer_info->size = 0; - } - - // Grow buffer if needed (if content_length was unknown) - if (position + length > buffer_info->capacity) - { - size_t new_capacity = buffer_info->capacity; - if (new_capacity == 0) - { - new_capacity = 4096; // Start with 4KB - } - - // Double capacity until it's large enough - while (new_capacity < position + length) - { - new_capacity *= 2; - } - - void* new_data = libspectrum_realloc(buffer_info->data, new_capacity); - if (!new_data) - { - XFS_DEBUG("https: write_buffer_callback [ERROR] failed to reallocate buffer to size %zu\n", new_capacity); - return -1; - } - - buffer_info->data = new_data; - buffer_info->capacity = new_capacity; - } - - // Copy data to buffer - memcpy((unsigned char*)buffer_info->data + position, buf, length); - - // Update size if this extends the buffer - if (position + length > buffer_info->size) - { - buffer_info->size = position + length; - } - - return (int)length; -} - static int parse_index_line_to_entry(const char* line, struct xfs_handle_https_dir_entry_t* entry); // Parse index.txt buffer and populate entries array @@ -477,7 +395,7 @@ static int https_parse_index_txt(const char* buffer, const size_t buffer_len, if (should_allocate) { - entry = (struct xfs_handle_https_dir_entry_t*)calloc(1, + entry = (struct xfs_handle_https_dir_entry_t*)xfs_https_calloc(1, sizeof(struct xfs_handle_https_dir_entry_t)); } @@ -503,7 +421,7 @@ static int https_parse_index_txt(const char* buffer, const size_t buffer_len, if (should_allocate) { // We allocated but didn't store, free it - free(entry); + xfs_https_free(entry); } } } @@ -512,7 +430,7 @@ static int https_parse_index_txt(const char* buffer, const size_t buffer_len, // Invalid entry if (should_allocate) { - free(entry); + xfs_https_free(entry); } } } @@ -568,19 +486,18 @@ static int16_t https_fetch_and_parse_index(const struct xfs_engine_mount_t* engi XFS_DEBUG("https: fetch_index fetching from '%s'\n", url); - // Allocate buffer and fetch index.txt - const size_t buffer_size = 2048; - char* buffer = (char*)libspectrum_malloc(buffer_size); - if (!buffer) + size_t buffer_size = 0; + char* buffer = xfs_https_index_buffer_acquire(&buffer_size); + if (!buffer || buffer_size == 0) { return XFS_ERR_NOMEM; } size_t length = buffer_size; - if (httpc_get_buffer(&tls_sck, url, buffer, &length) != HTTPC_OK) + if (xfs_https_http_get_buffer(url, buffer, &length) != XFS_HTTPS_HTTP_OK) { XFS_DEBUG("https: fetch_index failed: httpc_get_buffer error\n"); - libspectrum_free(buffer); + xfs_https_index_buffer_release(buffer); return XFS_ERR_NOENT; } @@ -591,7 +508,7 @@ static int16_t https_fetch_and_parse_index(const struct xfs_engine_mount_t* engi if (entry_count < 0) { XFS_DEBUG("https: fetch_index failed: parse error\n"); - libspectrum_free(buffer); + xfs_https_index_buffer_release(buffer); return XFS_ERR_IO; } @@ -606,20 +523,20 @@ static int16_t https_fetch_and_parse_index(const struct xfs_engine_mount_t* engi if (entry_count == 0) { XFS_DEBUG("https: fetch_index empty directory\n"); - libspectrum_free(buffer); + xfs_https_index_buffer_release(buffer); *out_entries = NULL; *out_entry_count = 0; return XFS_ERR_OK; // Empty directory } // Allocate array of pointers - struct xfs_handle_https_dir_entry_t** entries = (struct xfs_handle_https_dir_entry_t**)libspectrum_malloc(entry_count * - sizeof(struct xfs_handle_https_dir_entry_t*)); + struct xfs_handle_https_dir_entry_t** entries = (struct xfs_handle_https_dir_entry_t**)xfs_https_calloc(entry_count, + sizeof(struct xfs_handle_https_dir_entry_t*)); if (!entries) { XFS_DEBUG("https: fetch_index failed: no memory for entries array\n"); - libspectrum_free(buffer); + xfs_https_index_buffer_release(buffer); return XFS_ERR_NOMEM; } @@ -633,17 +550,15 @@ static int16_t https_fetch_and_parse_index(const struct xfs_engine_mount_t* engi { if (entries[i]) { - libspectrum_free(entries[i]); + xfs_https_free(entries[i]); } } - libspectrum_free(entries); - libspectrum_free(buffer); + xfs_https_free(entries); + xfs_https_index_buffer_release(buffer); return XFS_ERR_NOMEM; } - // Free buffer now that parsing is complete - libspectrum_free(buffer); - + xfs_https_index_buffer_release(buffer); *out_entries = entries; *out_entry_count = (uint8_t)parsed_count; @@ -651,7 +566,6 @@ static int16_t https_fetch_and_parse_index(const struct xfs_engine_mount_t* engi return XFS_ERR_OK; } - // Mount HTTPS filesystem static int16_t https_mount(const struct xfs_engine_t* engine, const char* hostname, const char* path, struct xfs_engine_mount_t* out_mount) { @@ -670,13 +584,12 @@ static int16_t https_mount(const struct xfs_engine_t* engine, const char* hostna return XFS_ERR_INVAL; } - struct https_engine_mount_data_t* mount_data = libspectrum_malloc(sizeof(struct https_engine_mount_data_t)); + struct https_engine_mount_data_t* mount_data = xfs_https_calloc(1, sizeof(struct https_engine_mount_data_t)); if (mount_data == NULL) { XFS_DEBUG("https: mount failed: no mount data\n"); return XFS_ERR_NOMEM; } - memset(mount_data, 0, sizeof(struct https_engine_mount_data_t)); // Initialize cache rotation index mount_data->next_cache = 0; @@ -705,7 +618,7 @@ static int16_t https_mount(const struct xfs_engine_t* engine, const char* hostna if (max_url_len >= sizeof(mount_data->url)) { XFS_DEBUG("https: mount failed: URL too long (hostname=%zu, path=%zu)\n", hostname_len, normalized_len); - libspectrum_free(mount_data); + xfs_https_free(mount_data); return XFS_ERR_INVAL; } @@ -741,7 +654,7 @@ static int16_t https_mount(const struct xfs_engine_t* engine, const char* hostna XFS_DEBUG("https: mount failed: URL buffer overflow or snprintf error (written=%d, max=%zu)\n", url_written, sizeof(mount_data->url)); mount_data->url[0] = '\0'; // Clear invalid URL - libspectrum_free(mount_data); + xfs_https_free(mount_data); return XFS_ERR_INVAL; } @@ -752,50 +665,51 @@ static int16_t https_mount(const struct xfs_engine_t* engine, const char* hostna // Verify mount URL exists using HEAD request XFS_DEBUG("https: mount verifying URL with HEAD request: %s\n", mount_data->url); - const int head_result = httpc_head(&tls_sck, mount_data->url); + const int head_result = xfs_https_http_head(mount_data->url); + const int response = xfs_https_http_response(); - if (head_result != HTTPC_OK) + if (head_result != XFS_HTTPS_HTTP_OK) { XFS_DEBUG("https: mount failed: HEAD request failed (result=%d, response=%d)\n", - head_result, tls_sck.response); + head_result, response); out_mount->mount_data = NULL; - free(mount_data); + xfs_https_free(mount_data); return XFS_ERR_IO; } // Prefer the HTTP response code when the server returned one. httpc_head can // return HTTPC_OK for a completed HTTP error response such as 404. - if ((tls_sck.response >= 200 && tls_sck.response < 400) || tls_sck.response == 405 || tls_sck.response == 403) + if ((response >= 200 && response < 400) || response == 405 || response == 403) { - XFS_DEBUG("https: mount HEAD request successful (response=%d)\n", tls_sck.response); + XFS_DEBUG("https: mount HEAD request successful (response=%d)\n", response); return XFS_ERR_OK; } - if (tls_sck.response == 404) + if (response == 404) { - XFS_DEBUG("https: mount failed: URL not found (response=%d)\n", tls_sck.response); + XFS_DEBUG("https: mount failed: URL not found (response=%d)\n", response); out_mount->mount_data = NULL; - free(mount_data); + xfs_https_free(mount_data); return XFS_ERR_NOENT; } - if (tls_sck.response >= 400 && tls_sck.response < 500) + if (response >= 400 && response < 500) { - XFS_DEBUG("https: mount failed: client error (response=%d)\n", tls_sck.response); + XFS_DEBUG("https: mount failed: client error (response=%d)\n", response); out_mount->mount_data = NULL; - free(mount_data); + xfs_https_free(mount_data); return XFS_ERR_INVAL; } - if (tls_sck.response >= 500 && tls_sck.response < 600) + if (response >= 500 && response < 600) { - XFS_DEBUG("https: mount failed: server error (response=%d)\n", tls_sck.response); + XFS_DEBUG("https: mount failed: server error (response=%d)\n", response); out_mount->mount_data = NULL; - free(mount_data); + xfs_https_free(mount_data); return XFS_ERR_IO; } - XFS_DEBUG("https: mount HEAD request successful (response=%d)\n", tls_sck.response); + XFS_DEBUG("https: mount HEAD request successful (response=%d)\n", response); return XFS_ERR_OK; } @@ -828,8 +742,8 @@ static void https_unmount(const struct xfs_engine_t* engine, struct xfs_engine_m mount_data->url[0] = '\0'; XFS_DEBUG("https: unmount complete\n"); + xfs_https_free(mount_data); mount->mount_data = NULL; - libspectrum_free(mount_data); } // Open file — download body into a PSRAM blob (see download_blob.c) @@ -856,45 +770,35 @@ static int16_t https_open(const struct xfs_engine_mount_t* engine, struct xfs_ha XFS_DEBUG("https: open URL='%s'\n", url); - struct xfs_handle_https_file_t* https_handle = libspectrum_malloc(sizeof(struct xfs_handle_https_file_t)); + struct xfs_handle_https_file_t *https_handle = xfs_https_calloc(1, sizeof(struct xfs_handle_https_file_t)); if (!https_handle) { + XFS_DEBUG("https: open failed: no memory for handle\n"); return XFS_ERR_NOMEM; } - memset(https_handle, 0, sizeof(struct xfs_handle_https_file_t)); - // Initialize buffer info for download callback - struct https_buffer_info_t buffer_info = {0}; - - // Download file using httpc_get XFS_DEBUG("https: open downloading from URL...\n"); - if (httpc_get(&tls_sck, url, write_buffer_callback, &buffer_info) != HTTPC_OK) + int e = xfs_https_download_file(url, &https_handle->blob, &https_handle->blob_size); + const int response = xfs_https_http_response(); + if (e != XFS_HTTPS_HTTP_OK) { - XFS_DEBUG("https: open failed: httpc_get error\n"); - if (buffer_info.data) - libspectrum_free(buffer_info.data); - libspectrum_free(https_handle); - return XFS_ERR_IO; - } - - if (buffer_info.expected_size > 0 && buffer_info.size != buffer_info.expected_size) - { - XFS_DEBUG("https: open failed: short download bytes=%zu expected=%zu\n", - buffer_info.size, buffer_info.expected_size); - if (buffer_info.data) - libspectrum_free(buffer_info.data); - libspectrum_free(https_handle); + XFS_DEBUG("https: open failed %d: httpc_get error (response %d, bytes=%zu)\n", + e, response, https_handle->blob_size); + if (https_handle->blob) + { + xfs_https_download_file_free(https_handle->blob); + } + xfs_https_free(https_handle); return XFS_ERR_IO; } - if (tls_sck.response < 200 || tls_sck.response >= 300) + if (response < 200 || response >= 300) { - XFS_DEBUG("https: open failed: HTTP response=%d\n", tls_sck.response); - if (buffer_info.data) - libspectrum_free(buffer_info.data); - libspectrum_free(https_handle); + XFS_DEBUG("https: open failed: HTTP response=%d\n", response); + xfs_https_download_file_free(https_handle->blob); + xfs_https_free(https_handle); - if (tls_sck.response == 404) + if (response == 404) { return XFS_ERR_NOENT; } @@ -902,10 +806,6 @@ static int16_t https_open(const struct xfs_engine_mount_t* engine, struct xfs_ha return XFS_ERR_IO; } - https_handle->blob = buffer_info.data; - https_handle->blob_size = buffer_info.size; - https_handle->read_pos = 0; - XFS_DEBUG("https: open download complete bytes=%zu\n", https_handle->blob_size); https_handle->live = 1; @@ -996,10 +896,9 @@ static int16_t https_close(const struct xfs_engine_mount_t* engine, struct xfs_h if (https_handle->blob) { - libspectrum_free(https_handle->blob); + xfs_https_download_file_free(https_handle->blob); https_handle->blob = NULL; } - https_handle->live = 0; XFS_DEBUG("https: close success\n"); @@ -1146,7 +1045,7 @@ static int16_t https_opendir(const struct xfs_engine_mount_t* engine, struct xfs uint8_t entry_count = 0; - struct xfs_handle_https_dir_t* https_handle = calloc(1, sizeof(struct xfs_handle_https_dir_t)); + struct xfs_handle_https_dir_t* https_handle = xfs_https_calloc(1, sizeof(struct xfs_handle_https_dir_t)); if (https_handle == NULL) { @@ -1157,7 +1056,7 @@ static int16_t https_opendir(const struct xfs_engine_mount_t* engine, struct xfs if (result != XFS_ERR_OK) { - free(https_handle); + xfs_https_free(https_handle); return result; } @@ -1230,6 +1129,26 @@ static int16_t https_readdir(const struct xfs_engine_mount_t* engine, struct xfs return 1; // Entry found } +static int16_t https_telldir(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle, uint32_t* position) +{ + (void)engine; + struct xfs_handle_https_dir_t* https_handle = get_https_dir_handle(handle); + if (!https_handle || !position) + return XFS_ERR_BADF; + *position = https_handle->dir_entries_pos; + return XFS_ERR_OK; +} + +static int16_t https_seekdir(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle, uint32_t position) +{ + (void)engine; + struct xfs_handle_https_dir_t* https_handle = get_https_dir_handle(handle); + if (!https_handle || position > https_handle->dir_entries_count) + return XFS_ERR_INVAL; + https_handle->dir_entries_pos = position; + return XFS_ERR_OK; +} + /* Free opendir entries; dir wrapper freed in https_free_handle. Safe to call twice. */ static int16_t https_closedir(const struct xfs_engine_mount_t* engine, struct xfs_handle_t* handle) { @@ -1252,10 +1171,10 @@ static int16_t https_closedir(const struct xfs_engine_mount_t* engine, struct xf { if (https_handle->dir_entries[i]) { - free(https_handle->dir_entries[i]); + xfs_https_free(https_handle->dir_entries[i]); } } - free(https_handle->dir_entries); + xfs_https_free(https_handle->dir_entries); https_handle->dir_entries = NULL; } https_handle->dir_entries_count = 0; @@ -1528,12 +1447,12 @@ static void https_free_handle(const struct xfs_engine_mount_t* engine, struct xf if (handle->type == XFS_HANDLE_TYPE_FILE) { (void)https_close(engine, handle); - free(handle->data); + xfs_https_free(handle->data); } else if (handle->type == XFS_HANDLE_TYPE_DIR) { (void)https_closedir(engine, handle); - free(handle->data); + xfs_https_free(handle->data); } handle->data = NULL; @@ -1560,7 +1479,7 @@ static void https_mount_info(const struct xfs_engine_mount_t *engine_mount, char } // HTTPS engine instance -struct xfs_engine_t https_engine = { +const struct xfs_engine_t https_engine = { .user = (void*)HTTPS_SCHEME, .mount = https_mount, .unmount = https_unmount, @@ -1573,6 +1492,8 @@ struct xfs_engine_t https_engine = { .lseek = https_lseek, .opendir = https_opendir, .readdir = https_readdir, + .telldir = https_telldir, + .seekdir = https_seekdir, .closedir = https_closedir, .stat = https_stat, .unlink = https_unlink, @@ -1585,7 +1506,7 @@ struct xfs_engine_t https_engine = { .free_handle = https_free_handle, }; -struct xfs_engine_t http_engine = { +const struct xfs_engine_t http_engine = { .user = (void*)HTTP_SCHEME, .mount = https_mount, .unmount = https_unmount, @@ -1598,6 +1519,8 @@ struct xfs_engine_t http_engine = { .lseek = https_lseek, .opendir = https_opendir, .readdir = https_readdir, + .telldir = https_telldir, + .seekdir = https_seekdir, .closedir = https_closedir, .stat = https_stat, .unlink = https_unlink, diff --git a/peripherals/fs/xfs_https_compat.c b/peripherals/fs/xfs_https_compat.c new file mode 100644 index 000000000..404ab9dc9 --- /dev/null +++ b/peripherals/fs/xfs_https_compat.c @@ -0,0 +1,170 @@ +#include "config.h" + +#include "xfs_https_compat.h" + +#include + +#include "libspectrum.h" +#include "../http/httpc.h" +#include "../http/http_sck.h" + +#include "xfs.h" + +void* xfs_https_alloc(size_t size) +{ + return libspectrum_malloc(size); +} + +void* xfs_https_calloc(size_t count, size_t size) +{ + void* ptr = libspectrum_malloc(count * size); + if (ptr) + { + memset(ptr, 0, count * size); + } + return ptr; +} + +void* xfs_https_realloc(void* ptr, size_t size) +{ + return libspectrum_realloc(ptr, size); +} + +void xfs_https_free(void* ptr) +{ + libspectrum_free(ptr); +} + +char* xfs_https_index_buffer_acquire(size_t* out_size) +{ + if (!out_size) + { + return NULL; + } + + *out_size = 2048; + return (char*)libspectrum_malloc(*out_size); +} + +void xfs_https_index_buffer_release(char* buffer) +{ + libspectrum_free(buffer); +} + +int xfs_https_http_get_buffer(const char* url, char* buffer, size_t* length) +{ + return httpc_get_buffer(&tls_sck, url, buffer, length); +} + +int xfs_https_http_head(const char* url) +{ + return httpc_head(&tls_sck, url); +} + +int xfs_https_http_response(void) +{ + return tls_sck.response; +} + +struct xfs_https_download_ctx +{ + uint8_t* data; + size_t size; + size_t capacity; + size_t expected_size; +}; + +static int write_buffer_callback(void *param, unsigned char *buf, size_t length, size_t position, size_t content_length) +{ + struct xfs_https_download_ctx* ctx = (struct xfs_https_download_ctx*)param; + + if (!ctx) + { + return -1; + } + + if (content_length > 0 && ctx->expected_size == 0) + { + ctx->expected_size = content_length; + } + + if (content_length > 0 && ctx->capacity == 0) + { + ctx->capacity = content_length; + ctx->data = libspectrum_malloc(content_length); + if (!ctx->data) + { + XFS_DEBUG("https: write_buffer_callback [ERROR] failed to allocate buffer of size %zu\n", content_length); + return -1; + } + } + + if (position + length > ctx->capacity) + { + size_t new_capacity = ctx->capacity; + if (new_capacity == 0) + { + new_capacity = 4096; + } + + while (new_capacity < position + length) + { + new_capacity *= 2; + } + + void* new_data = libspectrum_realloc(ctx->data, new_capacity); + if (!new_data) + { + XFS_DEBUG("https: write_buffer_callback [ERROR] failed to reallocate buffer to size %zu\n", new_capacity); + return -1; + } + + ctx->data = new_data; + ctx->capacity = new_capacity; + } + + memcpy(ctx->data + position, buf, length); + if (position + length > ctx->size) + { + ctx->size = position + length; + } + + return (int)length; +} + +int xfs_https_download_file(const char* url, uint8_t** out_blob, size_t* out_size) +{ + if (!out_blob || !out_size) + { + return -1; + } + + struct xfs_https_download_ctx ctx = {0}; + const int result = httpc_get(&tls_sck, url, write_buffer_callback, &ctx); + + if (result != HTTPC_OK) + { + libspectrum_free(ctx.data); + *out_blob = NULL; + *out_size = 0; + return result; + } + + if (ctx.expected_size > 0 && ctx.size != ctx.expected_size) + { + XFS_DEBUG("https: open failed: short download bytes=%zu expected=%zu\n", ctx.size, ctx.expected_size); + libspectrum_free(ctx.data); + *out_blob = NULL; + *out_size = 0; + return -1; + } + + *out_blob = ctx.data; + *out_size = ctx.size; + return result; +} + +void xfs_https_download_file_free(uint8_t* blob) +{ + libspectrum_free(blob); +} diff --git a/peripherals/fs/xfs_https_compat.h b/peripherals/fs/xfs_https_compat.h new file mode 100644 index 000000000..9c8b82990 --- /dev/null +++ b/peripherals/fs/xfs_https_compat.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include + +#define XFS_HTTPS_HTTP_OK 0 + +void* xfs_https_alloc(size_t size); +void* xfs_https_calloc(size_t count, size_t size); +void* xfs_https_realloc(void* ptr, size_t size); +void xfs_https_free(void* ptr); + +char* xfs_https_index_buffer_acquire(size_t* out_size); +void xfs_https_index_buffer_release(char* buffer); + +int xfs_https_http_get_buffer(const char* url, char* buffer, size_t* length); +int xfs_https_http_head(const char* url); +int xfs_https_http_response(void); + +int xfs_https_download_file(const char* url, uint8_t** out_blob, size_t* out_size); +void xfs_https_download_file_free(uint8_t* blob); diff --git a/peripherals/fs/xfs_overlay.c b/peripherals/fs/xfs_overlay.c new file mode 100644 index 000000000..759a4b400 --- /dev/null +++ b/peripherals/fs/xfs_overlay.c @@ -0,0 +1,709 @@ +#include "xfs.h" + +#include +#include +#include + +#define XFS_OVERLAY_MAX_READDIR_ENTRIES 256 + +typedef struct +{ + const xfs_overlay_layer_config_t* config; + struct xfs_engine_mount_t mount; +} xfs_overlay_layer_t; + +typedef struct +{ + xfs_overlay_layer_t layers[XFS_OVERLAY_MAX_LAYERS]; + uint8_t layer_count; + xfs_overlay_layer_t* default_layer; +} xfs_overlay_mount_t; + +typedef struct +{ + xfs_overlay_layer_t* layer; + struct xfs_handle_t child; +} xfs_overlay_file_handle_t; + +typedef struct +{ + xfs_overlay_mount_t* overlay; + struct xfs_stat_info* entries; + uint16_t entry_count; + uint16_t position; + bool parent_emitted; +} xfs_overlay_dir_handle_t; + +static xfs_overlay_mount_t* overlay_mount_data(const struct xfs_engine_mount_t* mount) +{ + return (xfs_overlay_mount_t*)mount->mount_data; +} + +static int overlay_layer_index_for_config(const xfs_overlay_mount_t* overlay, + const xfs_overlay_layer_config_t* config) +{ + for (uint8_t i = 0; i < overlay->layer_count; ++i) + { + if (overlay->layers[i].config == config) + return i; + } + return -1; +} + +static int16_t overlay_join_path(char* out, size_t out_size, const char* dir, const char* name) +{ + const int written = (strcmp(dir, "/") == 0) + ? snprintf(out, out_size, "/%s", name) + : snprintf(out, out_size, "%s/%s", dir, name); + if (written < 0 || (size_t)written >= out_size) + return XFS_ERR_NAMETOOLONG; + return XFS_ERR_OK; +} + +static int16_t overlay_mount(const struct xfs_engine_t* engine, const char* hostname, + const char* path, struct xfs_engine_mount_t* out_mount) +{ + (void)hostname; + (void)path; + const xfs_overlay_config_t* config = (const xfs_overlay_config_t*)engine->user; + if (!config) + return XFS_ERR_INVAL; + + xfs_overlay_mount_t* overlay = calloc(1, sizeof(*overlay)); + if (!overlay) + return XFS_ERR_NOMEM; + + int16_t first_error = XFS_ERR_NOENT; + for (uint8_t i = 0; config->layers[i] && i < XFS_OVERLAY_MAX_LAYERS; ++i) + { + const xfs_overlay_layer_config_t* layer_config = config->layers[i]; + xfs_overlay_layer_t* layer = &overlay->layers[overlay->layer_count]; + layer->config = layer_config; + + int16_t err = layer_config->engine->mount(layer_config->engine, + layer_config->hostname, layer_config->path, &layer->mount); + if (err == XFS_ERR_OK) + { + layer->mount.engine = layer_config->engine; + overlay->layer_count++; + } + else if (first_error == XFS_ERR_NOENT) + { + first_error = err; + } + } + + if (overlay->layer_count == 0) + { + free(overlay); + return first_error; + } + + int default_layer = overlay_layer_index_for_config(overlay, config->default_layer); + overlay->default_layer = &overlay->layers[default_layer >= 0 ? (uint8_t)default_layer : (overlay->layer_count - 1)]; + out_mount->mount_data = overlay; + XFS_DEBUG("overlay: mount success layers=%u default=%u\n", overlay->layer_count, overlay->default_layer); + return XFS_ERR_OK; +} + +static uint8_t overlay_is_mounted(const struct xfs_engine_t* engine, struct xfs_engine_mount_t* mount) +{ + (void)engine; + return mount->mount_data != NULL; +} + +static void overlay_unmount(const struct xfs_engine_t* engine, struct xfs_engine_mount_t* mount) +{ + (void)engine; + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + if (!overlay) + return; + + xfs_close_handles_for_mount(mount); + for (uint8_t i = 0; i < overlay->layer_count; ++i) + { + xfs_overlay_layer_t* layer = &overlay->layers[i]; + if (layer->config->engine->unmount) + layer->config->engine->unmount(layer->config->engine, &layer->mount); + } + free(overlay); + mount->mount_data = NULL; +} + +static void overlay_mount_info(const struct xfs_engine_mount_t* mount, char* buffer, size_t size) +{ + (void)mount; + if (!buffer || size == 0) + return; + strncpy(buffer, "xfs://ram/", size - 1); + buffer[size - 1] = '\0'; +} + +static bool overlay_path_exists(xfs_overlay_layer_t* layer, const char* path, struct xfs_stat_info* info) +{ + return layer->config->engine->stat(&layer->mount, path, info) == XFS_ERR_OK; +} + +static bool overlay_is_system_dir(const xfs_overlay_mount_t* overlay, const char* path) +{ + if (overlay->layer_count == 0) + return false; + + struct xfs_stat_info info; + const xfs_overlay_layer_t* layer = &overlay->layers[overlay->layer_count - 1]; + return layer->config->engine->stat(&layer->mount, path, &info) == XFS_ERR_OK + && info.type == XFS_TYPE_DIR + && info.storage == FS_STORAGE_SYSTEM; +} + +/* Shadow only an already-existing immediate parent; never create missing paths. */ +static int16_t overlay_mkdir_shadow(xfs_overlay_mount_t* overlay, const char* path) +{ + const char* slash = strrchr(path, '/'); + if (!slash) + return XFS_ERR_OK; + if (slash == path) + return XFS_ERR_OK; + + const size_t parent_len = (size_t)(slash - path); + if (parent_len >= XFS_PATH_MAX) + return XFS_ERR_NAMETOOLONG; + + char parent[XFS_PATH_MAX]; + memcpy(parent, path, parent_len); + parent[parent_len] = '\0'; + + struct xfs_stat_info info; + xfs_overlay_layer_t* first_layer = &overlay->layers[0]; + int16_t err = first_layer->config->engine->stat(&first_layer->mount, parent, &info); + if (err == XFS_ERR_OK) + return info.type == XFS_TYPE_DIR ? XFS_ERR_OK : XFS_ERR_NOTDIR; + if (err != XFS_ERR_NOENT) + return err; + + for (uint8_t i = 1; i < overlay->layer_count; ++i) + { + xfs_overlay_layer_t* layer = &overlay->layers[i]; + err = layer->config->engine->stat(&layer->mount, parent, &info); + if (err == XFS_ERR_OK) + { + if (info.type != XFS_TYPE_DIR) + return XFS_ERR_NOTDIR; + + err = first_layer->config->engine->mkdir(&first_layer->mount, parent); + return err == XFS_ERR_EXIST ? XFS_ERR_OK : err; + } + if (err != XFS_ERR_NOENT) + return err; + } + + return XFS_ERR_NOENT; +} + +static int16_t overlay_open(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + const char* path, int flags) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + if (!overlay) + return XFS_ERR_IO; + + if ((flags & XFS_O_CREAT) != 0) + { + // we always create on first layer + xfs_overlay_layer_t* layer = &overlay->layers[0]; + const int16_t shadow_err = overlay_mkdir_shadow(overlay, path); + if (shadow_err != XFS_ERR_OK) + return shadow_err; + + xfs_overlay_file_handle_t* overlay_handle = calloc(1, sizeof(*overlay_handle)); + if (!overlay_handle) + return XFS_ERR_NOMEM; + overlay_handle->layer = layer; + overlay_handle->child.type = XFS_HANDLE_TYPE_FILE; + + const int16_t err = layer->config->engine->open(&layer->mount, &overlay_handle->child, path, flags); + if (err == XFS_ERR_OK) + { + handle->data = overlay_handle; + return XFS_ERR_OK; + } + free(overlay_handle); + return err; + } + + struct xfs_stat_info stat_info; + int16_t first_error = XFS_ERR_NOENT; + + for (uint8_t i = 0; i < overlay->layer_count; ++i) + { + xfs_overlay_layer_t* layer = &overlay->layers[i]; + const int16_t stat_err = layer->config->engine->stat(&layer->mount, path, &stat_info); + if (stat_err == XFS_ERR_OK) + { + xfs_overlay_file_handle_t* overlay_handle = calloc(1, sizeof(*overlay_handle)); + if (!overlay_handle) + return XFS_ERR_NOMEM; + overlay_handle->layer = layer; + overlay_handle->child.type = XFS_HANDLE_TYPE_FILE; + + const int16_t err = layer->config->engine->open(&layer->mount, &overlay_handle->child, path, flags); + if (err == XFS_ERR_OK) + { + handle->data = overlay_handle; + return XFS_ERR_OK; + } + free(overlay_handle); + return err; + } + if (stat_err != XFS_ERR_NOENT && first_error == XFS_ERR_NOENT) + first_error = stat_err; + } + + xfs_overlay_layer_t* layer = overlay->default_layer; + xfs_overlay_file_handle_t* overlay_handle = calloc(1, sizeof(*overlay_handle)); + if (!overlay_handle) + return XFS_ERR_NOMEM; + overlay_handle->layer = overlay->default_layer; + overlay_handle->child.type = XFS_HANDLE_TYPE_FILE; + + const int16_t err = layer->config->engine->open(&layer->mount, &overlay_handle->child, path, flags); + if (err == XFS_ERR_OK) + { + handle->data = overlay_handle; + return XFS_ERR_OK; + } + free(overlay_handle); + return err; +} + +static int32_t overlay_read(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + void* buffer, uint32_t size) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + xfs_overlay_file_handle_t* overlay_handle = (xfs_overlay_file_handle_t*)handle->data; + if (!overlay || !overlay_handle) + return XFS_ERR_BADF; + xfs_overlay_layer_t* layer = overlay_handle->layer; + return layer->config->engine->read(&layer->mount, &overlay_handle->child, buffer, size); +} + +static const uint8_t* overlay_direct_read(const struct xfs_engine_mount_t* mount, + struct xfs_handle_t* handle, size_t* out_len) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + xfs_overlay_file_handle_t* overlay_handle = (xfs_overlay_file_handle_t*)handle->data; + if (!overlay || !overlay_handle) + return NULL; + xfs_overlay_layer_t* layer = overlay_handle->layer; + if (!layer->config->engine->direct_read) + return NULL; + return layer->config->engine->direct_read(&layer->mount, &overlay_handle->child, out_len); +} + +static int32_t overlay_write(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + const void* buffer, uint32_t size) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + xfs_overlay_file_handle_t* overlay_handle = (xfs_overlay_file_handle_t*)handle->data; + if (!overlay || !overlay_handle) + return XFS_ERR_BADF; + xfs_overlay_layer_t* layer = overlay_handle->layer; + return layer->config->engine->write(&layer->mount, &overlay_handle->child, buffer, size); +} + +static int16_t overlay_close(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle) +{ + xfs_overlay_file_handle_t* overlay_handle = (xfs_overlay_file_handle_t*)handle->data; + if (!overlay_handle) + return XFS_ERR_OK; + xfs_overlay_layer_t* layer = overlay_handle->layer; + const int16_t err = layer->config->engine->close(&layer->mount, &overlay_handle->child); + if (err == XFS_ERR_OK && layer->config->engine->free_handle) + { + /* The child engine owns its handle wrapper; release it once the close succeeds. */ + layer->config->engine->free_handle(&layer->mount, &overlay_handle->child); + } + return err; +} + +static int32_t overlay_lseek(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + int32_t offset, uint8_t whence) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + xfs_overlay_file_handle_t* overlay_handle = (xfs_overlay_file_handle_t*)handle->data; + if (!overlay || !overlay_handle) + return XFS_ERR_BADF; + xfs_overlay_layer_t* layer = overlay_handle->layer; + return layer->config->engine->lseek(&layer->mount, &overlay_handle->child, offset, whence); +} + +static bool overlay_entry_shadowed(xfs_overlay_mount_t* overlay, const char* path, + uint8_t layer_index, const char* name) +{ + if (strcmp(name, ".") == 0) + return false; + + char child[XFS_PATH_MAX]; + if (overlay_join_path(child, sizeof(child), path, name) != XFS_ERR_OK) + return false; + + struct xfs_stat_info info; + for (uint8_t i = 0; i < layer_index; ++i) + { + if (overlay_path_exists(&overlay->layers[i], child, &info)) + return true; + } + return false; +} + +static bool overlay_cached_dir_seen(const xfs_overlay_dir_handle_t* dir_handle, const char* name) +{ + for (uint16_t i = 0; i < dir_handle->entry_count; ++i) + { + if (dir_handle->entries[i].type == XFS_TYPE_DIR && + strcmp(dir_handle->entries[i].name, name) == 0) + return true; + } + return false; +} + +static int16_t overlay_cache_readdir_entry(xfs_overlay_dir_handle_t* dir_handle, + const char* path, uint8_t layer_index, struct xfs_stat_info* info) +{ + if (strcmp(info->name, "..") == 0) + return XFS_ERR_OK; + if (info->type == XFS_TYPE_DIR && overlay_cached_dir_seen(dir_handle, info->name)) + return XFS_ERR_OK; + if (overlay_entry_shadowed(dir_handle->overlay, path, layer_index, info->name)) + return XFS_ERR_OK; + if (dir_handle->entry_count >= XFS_OVERLAY_MAX_READDIR_ENTRIES) + return XFS_ERR_INVAL; + + if (info->type == XFS_TYPE_DIR) + { + char child[XFS_PATH_MAX]; + const int16_t err = overlay_join_path(child, sizeof(child), path, info->name); + if (err != XFS_ERR_OK) + return err; + if (overlay_is_system_dir(dir_handle->overlay, child)) + info->storage = FS_STORAGE_SYSTEM; + } + + dir_handle->entries[dir_handle->entry_count++] = *info; + return XFS_ERR_OK; +} + +static int16_t overlay_emit_parent(struct xfs_stat_info* info) +{ + memset(info, 0, sizeof(*info)); + info->type = XFS_TYPE_DIR; + info->storage = FS_STORAGE_RAM; + strncpy(info->name, "..", sizeof(info->name) - 1); + info->name[sizeof(info->name) - 1] = '\0'; + return 1; +} + +static int16_t overlay_scan_dir(xfs_overlay_dir_handle_t* dir_handle, const char* path) +{ + bool opened_any = false; + for (uint8_t layer_index = 0; layer_index < dir_handle->overlay->layer_count; ++layer_index) + { + xfs_overlay_layer_t* layer = &dir_handle->overlay->layers[layer_index]; + struct xfs_handle_t child = {.type = XFS_HANDLE_TYPE_DIR}; + int16_t err = layer->config->engine->opendir(&layer->mount, &child, path); + if (err == XFS_ERR_NOENT) + continue; + if (err != XFS_ERR_OK) + return err; + opened_any = true; + + struct xfs_stat_info info; + while ((err = layer->config->engine->readdir(&layer->mount, &child, &info)) > 0) + { + err = overlay_cache_readdir_entry(dir_handle, path, layer_index, &info); + if (err != XFS_ERR_OK) + break; + } + + const int16_t close_err = layer->config->engine->closedir(&layer->mount, &child); + if (close_err == XFS_ERR_OK && layer->config->engine->free_handle) + layer->config->engine->free_handle(&layer->mount, &child); + if (err < 0) + return err; + if (close_err != XFS_ERR_OK) + return close_err; + } + return opened_any ? XFS_ERR_OK : XFS_ERR_NOENT; +} + +static int16_t overlay_opendir(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + const char* path) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + if (!overlay) + return XFS_ERR_IO; + + xfs_overlay_dir_handle_t* dir_handle = calloc(1, sizeof(*dir_handle)); + if (!dir_handle) + return XFS_ERR_NOMEM; + dir_handle->entries = calloc(XFS_OVERLAY_MAX_READDIR_ENTRIES, sizeof(*dir_handle->entries)); + if (!dir_handle->entries) + { + free(dir_handle); + return XFS_ERR_NOMEM; + } + dir_handle->overlay = overlay; + + const int16_t err = overlay_scan_dir(dir_handle, path); + if (err != XFS_ERR_OK) + { + free(dir_handle->entries); + free(dir_handle); + return err; + } + handle->data = dir_handle; + handle->dir_position = 0; + return XFS_ERR_OK; +} + +static int16_t overlay_readdir(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + struct xfs_stat_info* info) +{ + (void)mount; + xfs_overlay_dir_handle_t* dir_handle = (xfs_overlay_dir_handle_t*)handle->data; + if (!dir_handle || !dir_handle->entries) + return XFS_ERR_BADF; + if (!dir_handle->parent_emitted) + { + dir_handle->parent_emitted = true; + handle->dir_position = 0; + return overlay_emit_parent(info); + } + if (dir_handle->position >= dir_handle->entry_count) + return 0; + + *info = dir_handle->entries[dir_handle->position++]; + handle->dir_position = dir_handle->position; + return 1; +} + +static int16_t overlay_closedir(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle) +{ + (void)mount; + xfs_overlay_dir_handle_t* dir_handle = (xfs_overlay_dir_handle_t*)handle->data; + if (!dir_handle) + return XFS_ERR_OK; + free(dir_handle->entries); + dir_handle->entries = NULL; + dir_handle->entry_count = 0; + dir_handle->position = 0; + dir_handle->parent_emitted = false; + handle->dir_position = 0; + return XFS_ERR_OK; +} + +static int16_t overlay_telldir(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, uint32_t* position) +{ + (void)mount; + xfs_overlay_dir_handle_t* dir_handle = (xfs_overlay_dir_handle_t*)handle->data; + if (!dir_handle || !position) + return XFS_ERR_BADF; + *position = dir_handle->position; + return XFS_ERR_OK; +} + +static int16_t overlay_seekdir(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, uint32_t position) +{ + (void)mount; + xfs_overlay_dir_handle_t* dir_handle = (xfs_overlay_dir_handle_t*)handle->data; + if (!dir_handle || !dir_handle->entries || position > dir_handle->entry_count) + return XFS_ERR_INVAL; + dir_handle->position = (uint16_t)position; + dir_handle->parent_emitted = true; + handle->dir_position = position; + return XFS_ERR_OK; +} + +static int16_t overlay_stat(const struct xfs_engine_mount_t* mount, const char* path, + struct xfs_stat_info* stat_info) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + if (!overlay) + return XFS_ERR_IO; + int16_t first_error = XFS_ERR_NOENT; + for (uint8_t i = 0; i < overlay->layer_count; ++i) + { + int16_t err = overlay->layers[i].config->engine->stat(&overlay->layers[i].mount, path, stat_info); + if (err == XFS_ERR_OK) + { + if (stat_info->type == XFS_TYPE_DIR) + { + if (overlay_is_system_dir(overlay, path)) + stat_info->storage = FS_STORAGE_SYSTEM; + } + return XFS_ERR_OK; + } + if (err != XFS_ERR_NOENT && first_error == XFS_ERR_NOENT) + first_error = err; + } + return first_error; +} + +static int16_t overlay_unlink(const struct xfs_engine_mount_t* mount, const char* path) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + if (!overlay) + return XFS_ERR_IO; + + struct xfs_stat_info info; + int16_t first_error = XFS_ERR_NOENT; + for (uint8_t i = 0; i < overlay->layer_count; ++i) + { + xfs_overlay_layer_t* layer = &overlay->layers[i]; + int16_t err = layer->config->engine->stat(&layer->mount, path, &info); + if (err == XFS_ERR_OK) + { + if (info.type == XFS_TYPE_DIR) + { + if (overlay_is_system_dir(overlay, path)) + return XFS_ERR_INVAL; + } + return layer->config->engine->unlink(&layer->mount, path); + } + if (err != XFS_ERR_NOENT && first_error == XFS_ERR_NOENT) + first_error = err; + } + return first_error; +} + +static int16_t overlay_mkdir(const struct xfs_engine_mount_t* mount, const char* path) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + if (!overlay) + return XFS_ERR_IO; + xfs_overlay_layer_t* layer = overlay->default_layer; + return layer->config->engine->mkdir(&layer->mount, path); +} + +static int16_t overlay_rmdir(const struct xfs_engine_mount_t* mount, const char* path) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + if (!overlay) + return XFS_ERR_IO; + + struct xfs_stat_info info; + int16_t first_error = XFS_ERR_NOENT; + for (uint8_t i = 0; i < overlay->layer_count; ++i) + { + xfs_overlay_layer_t* layer = &overlay->layers[i]; + int16_t err = layer->config->engine->stat(&layer->mount, path, &info); + if (err == XFS_ERR_OK) + { + if (info.type == XFS_TYPE_DIR) + { + if (overlay_is_system_dir(overlay, path)) + return XFS_ERR_INVAL; + } + return layer->config->engine->rmdir(&layer->mount, path); + } + if (err != XFS_ERR_NOENT && first_error == XFS_ERR_NOENT) + first_error = err; + } + return first_error; +} + +static int16_t overlay_chdir(const struct xfs_engine_mount_t* mount, const char* path) +{ + struct xfs_stat_info info; + int16_t err = overlay_stat(mount, path, &info); + if (err != XFS_ERR_OK || info.type != XFS_TYPE_DIR) + return XFS_ERR_NOENT; + return XFS_ERR_OK; +} + +static int16_t overlay_getcwd(const struct xfs_engine_mount_t* mount, char* buffer, uint16_t size) +{ + (void)mount; + if (size < 2) + return XFS_ERR_INVAL; + strncpy(buffer, "/", size - 1); + buffer[size - 1] = '\0'; + return XFS_ERR_OK; +} + +static int16_t overlay_rename(const struct xfs_engine_mount_t* mount, const char* old_path, + const char* new_path) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + if (!overlay) + return XFS_ERR_IO; + + struct xfs_stat_info info; + int16_t first_error = XFS_ERR_NOENT; + for (uint8_t i = 0; i < overlay->layer_count; ++i) + { + xfs_overlay_layer_t* layer = &overlay->layers[i]; + int16_t err = layer->config->engine->stat(&layer->mount, old_path, &info); + if (err == XFS_ERR_OK) + return layer->config->engine->rename(&layer->mount, old_path, new_path); + if (err != XFS_ERR_NOENT && first_error == XFS_ERR_NOENT) + first_error = err; + } + return first_error; +} + +static int16_t overlay_chmod(const struct xfs_engine_mount_t* mount, const char* path, uint16_t mode) +{ + xfs_overlay_mount_t* overlay = overlay_mount_data(mount); + if (!overlay) + return XFS_ERR_IO; + xfs_overlay_layer_t* layer = overlay->default_layer; + return layer->config->engine->chmod(&layer->mount, path, mode); +} + +static void overlay_free_handle(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle) +{ + if (!handle->data) + return; + if (handle->type == XFS_HANDLE_TYPE_FILE) + { + xfs_overlay_file_handle_t* overlay_handle = (xfs_overlay_file_handle_t*)handle->data; + (void)overlay_close(mount, handle); + free(overlay_handle); + } + else if (handle->type == XFS_HANDLE_TYPE_DIR) + { + xfs_overlay_dir_handle_t* dir_handle = (xfs_overlay_dir_handle_t*)handle->data; + (void)overlay_closedir(mount, handle); + free(dir_handle); + } + handle->data = NULL; +} + +const struct xfs_engine_t xfs_overlay_engine = { + .user = (void*)&xfs_default_overlay, + .mount = overlay_mount, + .is_mounted = overlay_is_mounted, + .unmount = overlay_unmount, + .mount_info = overlay_mount_info, + .open = overlay_open, + .read = overlay_read, + .direct_read = overlay_direct_read, + .write = overlay_write, + .close = overlay_close, + .lseek = overlay_lseek, + .opendir = overlay_opendir, + .readdir = overlay_readdir, + .telldir = overlay_telldir, + .seekdir = overlay_seekdir, + .closedir = overlay_closedir, + .stat = overlay_stat, + .unlink = overlay_unlink, + .mkdir = overlay_mkdir, + .rmdir = overlay_rmdir, + .chdir = overlay_chdir, + .getcwd = overlay_getcwd, + .rename = overlay_rename, + .chmod = overlay_chmod, + .free_handle = overlay_free_handle, +}; diff --git a/peripherals/fs/xfs_romfs.c b/peripherals/fs/xfs_romfs.c new file mode 100644 index 000000000..97cb097b1 --- /dev/null +++ b/peripherals/fs/xfs_romfs.c @@ -0,0 +1,379 @@ +#include "xfs.h" +#include "ramfs.h" +#include +#include +#include + +typedef struct +{ + ramfs_t fs; + const xfs_romfs_config_t* config; +} xfs_romfs_mount_t; + +typedef struct +{ + const ramfs_entry_t* entry; + uint32_t offset; +} xfs_romfs_file_handle_t; + +typedef struct +{ + ramfs_dir_t dir; +} xfs_romfs_dir_handle_t; + +static xfs_romfs_mount_t* romfs_mount_data(const struct xfs_engine_mount_t* mount) +{ + return (xfs_romfs_mount_t*)mount->mount_data; +} + +static int16_t romfs_mount(const struct xfs_engine_t* engine, const char* hostname, + const char* path, struct xfs_engine_mount_t* out_mount) +{ + (void)hostname; + (void)path; + const xfs_romfs_config_t* config = (const xfs_romfs_config_t*)engine->user; + if (!config || !config->start || !config->end) + return XFS_ERR_INVAL; + + xfs_romfs_mount_t* mount = calloc(1, sizeof(*mount)); + if (!mount) + return XFS_ERR_NOMEM; + + if (!ramfs_mount(config->start, config->end, &mount->fs)) + { + free(mount); + return XFS_ERR_CORRUPT; + } + + mount->config = config; + out_mount->mount_data = mount; + XFS_DEBUG("romfs: mount success entries=%lu\n", (unsigned long)mount->fs.header->entry_count); + return XFS_ERR_OK; +} + +static uint8_t romfs_is_mounted(const struct xfs_engine_t* engine, struct xfs_engine_mount_t* mount) +{ + (void)engine; + return mount->mount_data != NULL; +} + +static void romfs_unmount(const struct xfs_engine_t* engine, struct xfs_engine_mount_t* mount) +{ + (void)engine; + xfs_close_handles_for_mount(mount); + free(mount->mount_data); + mount->mount_data = NULL; +} + +static void romfs_mount_info(const struct xfs_engine_mount_t* mount, char* buffer, size_t size) +{ + if (!buffer || size == 0) + return; + const xfs_romfs_mount_t* romfs = romfs_mount_data(mount); + const char* name = romfs && romfs->config && romfs->config->name ? romfs->config->name : "romfs"; + snprintf(buffer, size, "xfs://%s/", name); + buffer[size - 1] = '\0'; +} + +static int16_t romfs_open(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + const char* path, int flags) +{ + xfs_romfs_mount_t* romfs = romfs_mount_data(mount); + if (!romfs) + return XFS_ERR_IO; + const int accmode = flags & XFS_O_RDWR; + if (accmode == XFS_O_WRONLY || accmode == XFS_O_RDWR || (flags & XFS_O_CREAT) || + (flags & XFS_O_TRUNC) || (flags & XFS_O_APPEND)) + { + return -100; + } + + const ramfs_entry_t* entry = ramfs_find(&romfs->fs, path); + if (!entry) + return XFS_ERR_NOENT; + if (entry->type == RAMFS_TYPE_DIR) + return XFS_ERR_ISDIR; + + xfs_romfs_file_handle_t* file = calloc(1, sizeof(*file)); + if (!file) + return XFS_ERR_NOMEM; + file->entry = entry; + handle->data = file; + return XFS_ERR_OK; +} + +static int32_t romfs_read(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + void* buffer, uint32_t size) +{ + xfs_romfs_mount_t* romfs = romfs_mount_data(mount); + xfs_romfs_file_handle_t* file = (xfs_romfs_file_handle_t*)handle->data; + if (!romfs || !file || !file->entry) + return XFS_ERR_BADF; + + const uint8_t* data = ramfs_file_data(&romfs->fs, file->entry); + if (!data) + return XFS_ERR_IO; + + uint32_t available = file->entry->size > file->offset ? file->entry->size - file->offset : 0; + if (size > available) + size = available; + memcpy(buffer, data + file->offset, size); + file->offset += size; + return (int32_t)size; +} + +static const uint8_t* romfs_direct_read(const struct xfs_engine_mount_t* mount, + struct xfs_handle_t* handle, size_t* out_len) +{ + xfs_romfs_mount_t* romfs = romfs_mount_data(mount); + xfs_romfs_file_handle_t* file = (xfs_romfs_file_handle_t*)handle->data; + if (!romfs || !file || !file->entry || !out_len) + return NULL; + + const uint8_t* data = ramfs_file_data(&romfs->fs, file->entry); + if (!data) + return NULL; + *out_len = file->entry->size; + return data; +} + +static int32_t romfs_write(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + const void* buffer, uint32_t size) +{ + (void)mount; + (void)handle; + (void)buffer; + (void)size; + return XFS_ERR_INVAL; +} + +static int16_t romfs_close(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle) +{ + (void)mount; + (void)handle; + return XFS_ERR_OK; +} + +static int32_t romfs_lseek(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + int32_t offset, uint8_t whence) +{ + (void)mount; + xfs_romfs_file_handle_t* file = (xfs_romfs_file_handle_t*)handle->data; + if (!file || !file->entry) + return XFS_ERR_BADF; + + int32_t next; + switch (whence) + { + case XFS_SEEK_SET: + next = offset; + break; + case XFS_SEEK_CUR: + next = (int32_t)file->offset + offset; + break; + case XFS_SEEK_END: + next = (int32_t)file->entry->size + offset; + break; + default: + return XFS_ERR_INVAL; + } + + if (next < 0) + return XFS_ERR_INVAL; + if ((uint32_t)next > file->entry->size) + next = (int32_t)file->entry->size; + file->offset = (uint32_t)next; + return next; +} + +static int16_t romfs_opendir(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + const char* path) +{ + xfs_romfs_mount_t* romfs = romfs_mount_data(mount); + if (!romfs) + return XFS_ERR_IO; + + xfs_romfs_dir_handle_t* dir = calloc(1, sizeof(*dir)); + if (!dir) + return XFS_ERR_NOMEM; + if (!ramfs_opendir(&romfs->fs, path, &dir->dir)) + { + free(dir); + return XFS_ERR_NOENT; + } + handle->data = dir; + return XFS_ERR_OK; +} + +static int16_t romfs_readdir(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, + struct xfs_stat_info* info) +{ + xfs_romfs_mount_t* romfs = romfs_mount_data(mount); + xfs_romfs_dir_handle_t* dir = (xfs_romfs_dir_handle_t*)handle->data; + if (!romfs || !dir) + return XFS_ERR_BADF; + + const ramfs_entry_t* entry = ramfs_readdir(&romfs->fs, &dir->dir); + if (!entry) + return 0; + + memset(info, 0, sizeof(*info)); + info->type = entry->type == RAMFS_TYPE_DIR ? XFS_TYPE_DIR : XFS_TYPE_REG; + info->storage = romfs->config ? romfs->config->storage : FS_STORAGE_SYSTEM; + info->size = entry->size; + info->mtime = entry->mtime; + info->ctime = entry->mtime; + strncpy(info->name, entry->name, sizeof(info->name) - 1); + info->name[sizeof(info->name) - 1] = '\0'; + return 1; +} + +static int16_t romfs_telldir(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, uint32_t* position) +{ + (void)mount; + xfs_romfs_dir_handle_t* dir = (xfs_romfs_dir_handle_t*)handle->data; + if (!dir || !position) + return XFS_ERR_INVAL; + *position = dir->dir.index; + return XFS_ERR_OK; +} + +static int16_t romfs_seekdir(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle, uint32_t position) +{ + (void)mount; + xfs_romfs_dir_handle_t* dir = (xfs_romfs_dir_handle_t*)handle->data; + if (!dir) + return XFS_ERR_BADF; + dir->dir.index = position; + return XFS_ERR_OK; +} + +static int16_t romfs_closedir(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle) +{ + (void)mount; + (void)handle; + return XFS_ERR_OK; +} + +static int16_t romfs_stat(const struct xfs_engine_mount_t* mount, const char* path, + struct xfs_stat_info* stat_info) +{ + xfs_romfs_mount_t* romfs = romfs_mount_data(mount); + if (!romfs) + return XFS_ERR_IO; + + if (!path || path[0] == '\0' || strcmp(path, "/") == 0) + { + memset(stat_info, 0, sizeof(*stat_info)); + stat_info->type = XFS_TYPE_DIR; + stat_info->storage = romfs->config ? romfs->config->storage : FS_STORAGE_SYSTEM; + strncpy(stat_info->name, "/", sizeof(stat_info->name) - 1); + return XFS_ERR_OK; + } + + const ramfs_entry_t* entry = ramfs_find(&romfs->fs, path); + if (!entry) + return XFS_ERR_NOENT; + + memset(stat_info, 0, sizeof(*stat_info)); + stat_info->type = entry->type == RAMFS_TYPE_DIR ? XFS_TYPE_DIR : XFS_TYPE_REG; + stat_info->storage = romfs->config ? romfs->config->storage : FS_STORAGE_SYSTEM; + stat_info->size = entry->size; + stat_info->mtime = entry->mtime; + stat_info->ctime = entry->mtime; + strncpy(stat_info->name, entry->name, sizeof(stat_info->name) - 1); + stat_info->name[sizeof(stat_info->name) - 1] = '\0'; + return XFS_ERR_OK; +} + +static int16_t romfs_unlink(const struct xfs_engine_mount_t* mount, const char* path) +{ + (void)mount; + (void)path; + return XFS_ERR_INVAL; +} + +static int16_t romfs_mkdir(const struct xfs_engine_mount_t* mount, const char* path) +{ + (void)mount; + (void)path; + return XFS_ERR_INVAL; +} + +static int16_t romfs_rmdir(const struct xfs_engine_mount_t* mount, const char* path) +{ + (void)mount; + (void)path; + return XFS_ERR_INVAL; +} + +static int16_t romfs_chdir(const struct xfs_engine_mount_t* mount, const char* path) +{ + struct xfs_stat_info info; + int16_t err = romfs_stat(mount, path, &info); + if (err != XFS_ERR_OK || info.type != XFS_TYPE_DIR) + return XFS_ERR_NOENT; + return XFS_ERR_OK; +} + +static int16_t romfs_getcwd(const struct xfs_engine_mount_t* mount, char* buffer, uint16_t size) +{ + (void)mount; + if (size < 2) + return XFS_ERR_INVAL; + strncpy(buffer, "/", size - 1); + buffer[size - 1] = '\0'; + return XFS_ERR_OK; +} + +static int16_t romfs_rename(const struct xfs_engine_mount_t* mount, const char* old_path, + const char* new_path) +{ + (void)mount; + (void)old_path; + (void)new_path; + return XFS_ERR_INVAL; +} + +static int16_t romfs_chmod(const struct xfs_engine_mount_t* mount, const char* path, uint16_t mode) +{ + (void)mount; + (void)path; + (void)mode; + return XFS_ERR_INVAL; +} + +static void romfs_free_handle(const struct xfs_engine_mount_t* mount, struct xfs_handle_t* handle) +{ + (void)mount; + free(handle->data); + handle->data = NULL; +} + +const struct xfs_engine_t xfs_romfs_engine = { + .user = (void*)&xfs_default_romfs, + .mount = romfs_mount, + .is_mounted = romfs_is_mounted, + .unmount = romfs_unmount, + .mount_info = romfs_mount_info, + .open = romfs_open, + .read = romfs_read, + .direct_read = romfs_direct_read, + .write = romfs_write, + .close = romfs_close, + .lseek = romfs_lseek, + .opendir = romfs_opendir, + .readdir = romfs_readdir, + .telldir = romfs_telldir, + .seekdir = romfs_seekdir, + .closedir = romfs_closedir, + .stat = romfs_stat, + .unlink = romfs_unlink, + .mkdir = romfs_mkdir, + .rmdir = romfs_rmdir, + .chdir = romfs_chdir, + .getcwd = romfs_getcwd, + .rename = romfs_rename, + .chmod = romfs_chmod, + .free_handle = romfs_free_handle, +}; diff --git a/peripherals/fs/xfs_worker.c b/peripherals/fs/xfs_worker.c index 3ae3dc3d0..5666ab730 100644 --- a/peripherals/fs/xfs_worker.c +++ b/peripherals/fs/xfs_worker.c @@ -7,8 +7,8 @@ #include #include #include -#include #include +#include #include #if defined(WIN32) || defined(_WIN32) #include @@ -40,27 +40,13 @@ bool xfs_debug_is_enabled(void) return xfs_debug_enabled; } -void xfs_debug_log(const char *format, ...) -{ - va_list args; - va_list remote_args; - char buffer[1024]; - - va_start(args, format); - va_copy(remote_args, args); - vprintf(format, args); - vsnprintf(buffer, sizeof(buffer), format, remote_args); - va_end(remote_args); - va_end(args); - - gdbserver_send_remote_console_output(buffer); -} - // XFS base directory path char xfs_base_path[512]; void xfs_init() { + xfs_compat_init(); + snprintf(xfs_base_path, sizeof(xfs_base_path), "%s/xfs", compat_get_config_path()); // Create "xfs" directory in Application Support directory diff --git a/peripherals/nic/spectranext.h b/peripherals/nic/spectranext.h index 5eef5105f..02e522bc5 100644 --- a/peripherals/nic/spectranext.h +++ b/peripherals/nic/spectranext.h @@ -17,7 +17,8 @@ enum spectranext_cmd_t SPECTRANEXT_CMD_WIFI_DISCONNECT = 4, SPECTRANEXT_CMD_DNS_GETHOSTBYNAME = 5, SPECTRANEXT_CMD_ENGINECALL = 6, - SPECTRANEXT_CMD_GET_MESSAGE = 7 + SPECTRANEXT_CMD_GET_MESSAGE = 7, + SPECTRANEXT_CMD_XFS_READ = 8 }; #define WIFI_CONTROLLER_STATUS_OFFLINE (0u) @@ -46,6 +47,9 @@ enum spectranext_cmd_t #define SPECTRANEXT_MESSAGE_MAX 128 +/* Maximum XFS path supplied by the Z80, including its NUL terminator. */ +#define SPECTRANEXT_XFS_READ_PATH_MAX 128 + #define SPECTRANEXT_CMD_REG_IDLE 0xFFu #pragma pack(push, 1) @@ -141,9 +145,33 @@ typedef union spectranext_workspace } out; } get_message; + /* XFS_READ input and output. */ + struct + { + struct + { + char source_filename[SPECTRANEXT_XFS_READ_PATH_MAX]; + uint32_t source_offset; + uint8_t target_first_page; + uint16_t target_first_page_offset; + uint32_t maximum_data; + } in; + struct + { + uint32_t bytes_read; + } out; + } xfs_read; + char page[4096 - 2]; } spectranext_workspace_t; +_Static_assert(offsetof(spectranext_workspace_t, xfs_read.in.source_filename) == 0u, ""); +_Static_assert(offsetof(spectranext_workspace_t, xfs_read.in.source_offset) == 128u, ""); +_Static_assert(offsetof(spectranext_workspace_t, xfs_read.in.target_first_page) == 132u, ""); +_Static_assert(offsetof(spectranext_workspace_t, xfs_read.in.target_first_page_offset) == 133u, ""); +_Static_assert(offsetof(spectranext_workspace_t, xfs_read.in.maximum_data) == 135u, ""); +_Static_assert(offsetof(spectranext_workspace_t, xfs_read.out.bytes_read) == 139u, ""); + struct spectranext_controller_t { uint8_t command; diff --git a/peripherals/nic/spectranext_controller.c b/peripherals/nic/spectranext_controller.c index e0b889ed5..486abfc35 100644 --- a/peripherals/nic/spectranext_controller.c +++ b/peripherals/nic/spectranext_controller.c @@ -11,12 +11,20 @@ #include #include #endif +#include #include #include "engines/engine.h" #include "libspectrum.h" #include "memory_pages.h" +#include "peripherals/fs/xfs.h" +#include "peripherals/fs/xfs_engines.h" +#include "peripherals/spectranet.h" + +#define SPECTRANEXT_RAM_PAGE_FIRST 0xC0u +#define SPECTRANEXT_RAM_PAGE_LAST 0xDFu +#define SPECTRANEXT_RAM_PAGE_COUNT (SPECTRANEXT_RAM_PAGE_LAST - SPECTRANEXT_RAM_PAGE_FIRST + 1u) spectranext_enginecall_args_t spectranext_enginecall_args; @@ -37,6 +45,81 @@ volatile struct spectranext_controller_t spectranext_controller = { .status = SPECTRANEXT_STATUS_SUCCESS, }; +/* + * XFS_READ is controller-owned: mount the default RAM-over-ROMFS overlay for + * this short-lived operation, resolving the caller's absolute path unchanged. + */ +static int16_t spectranext_xfs_read(const char *path, + const uint32_t source_offset, + const uint8_t target_first_page, + const uint16_t target_first_page_offset, + const uint32_t maximum_data, + uint32_t *const bytes_read_out) +{ + if (path == NULL || path[0] == '\0' || path[0] != '/' || + source_offset > INT32_MAX || + target_first_page < SPECTRANEXT_RAM_PAGE_FIRST || + target_first_page > SPECTRANEXT_RAM_PAGE_LAST || + target_first_page_offset >= 0x1000u) + return XFS_ERR_INVAL; + + const uint32_t destination_offset = + (uint32_t)(target_first_page - SPECTRANEXT_RAM_PAGE_FIRST) * 0x1000u + target_first_page_offset; + const uint32_t destination_capacity = SPECTRANEXT_RAM_PAGE_COUNT * 0x1000u - destination_offset; + if (maximum_data > destination_capacity) + return XFS_ERR_INVAL; + + *bytes_read_out = 0; + + struct xfs_engine_mount_t mount = { .engine = &xfs_overlay_engine }; + int16_t err = mount.engine->mount(mount.engine, "ram", "/", &mount); + if (err != XFS_ERR_OK) + return err; + + struct xfs_handle_t handle = { .type = XFS_HANDLE_TYPE_FILE }; + err = mount.engine->open(&mount, &handle, path, XFS_O_RDONLY); + if (err == XFS_ERR_OK) + { + if (mount.engine->lseek(&mount, &handle, (int32_t)source_offset, XFS_SEEK_SET) < 0) + err = XFS_ERR_IO; + + uint8_t page = target_first_page; + uint16_t page_offset = target_first_page_offset; + uint32_t remaining = maximum_data; + while (err == XFS_ERR_OK && remaining != 0) + { + uint8_t *const destination = spectranet_ram_page(page); + if (destination == NULL) + { + err = XFS_ERR_IO; + break; + } + const uint32_t chunk_size = remaining < 0x1000u - page_offset + ? remaining : 0x1000u - page_offset; + const int32_t read_result = mount.engine->read(&mount, &handle, destination + page_offset, chunk_size); + if (read_result < 0) + { + err = (int16_t)read_result; + break; + } + *bytes_read_out += (uint32_t)read_result; + if ((uint32_t)read_result < chunk_size) + break; + remaining -= (uint32_t)read_result; + ++page; + page_offset = 0; + } + + const int16_t close_err = mount.engine->close(&mount, &handle); + if (err == XFS_ERR_OK && close_err != XFS_ERR_OK) + err = close_err; + mount.engine->free_handle(&mount, &handle); + } + + mount.engine->unmount(mount.engine, &mount); + return err; +} + int spectranext_enginecall_dispatch(const char *input_file, const char *output_file, const char *operation) { char opbuf[256]; @@ -241,6 +324,31 @@ static void spectranext_controller_process_command(void) spectranext_controller_get_message(); break; + case SPECTRANEXT_CMD_XFS_READ: + { + char path[SPECTRANEXT_XFS_READ_PATH_MAX]; + memcpy(path, (const void *)spectranext_controller.workspace.xfs_read.in.source_filename, + sizeof(path)); + if (memchr(path, '\0', sizeof(path)) == NULL) + { + spectranext_set_status(SPECTRANEXT_STATUS_ERROR); + break; + } + + uint32_t bytes_read = 0; + const int16_t result = spectranext_xfs_read( + path, + spectranext_controller.workspace.xfs_read.in.source_offset, + spectranext_controller.workspace.xfs_read.in.target_first_page, + spectranext_controller.workspace.xfs_read.in.target_first_page_offset, + spectranext_controller.workspace.xfs_read.in.maximum_data, + &bytes_read); + spectranext_controller.workspace.xfs_read.out.bytes_read = bytes_read; + spectranext_set_status( + result == XFS_ERR_OK ? SPECTRANEXT_STATUS_SUCCESS : SPECTRANEXT_STATUS_ERROR); + break; + } + default: spectranext_set_status(SPECTRANEXT_STATUS_ERROR); break; diff --git a/peripherals/spectranet.c b/peripherals/spectranet.c index 1e9f07845..271bfe8e3 100644 --- a/peripherals/spectranet.c +++ b/peripherals/spectranet.c @@ -82,10 +82,16 @@ static libspectrum_dword spectranet_source_rom_hash; int spectranet_available = 0; int spectranet_paged; int spectranet_paged_via_io; -int spectranet_w5100_paged_a = 0, spectranet_w5100_paged_b = 0; -int spectranet_xfs_paged_a = 0, spectranet_xfs_paged_b = 0; -int spectranet_spectranext_config_paged_a = 0, spectranet_spectranext_config_paged_b = 0; -int spectranet_flash_paged_a = 0, spectranet_flash_paged_b = 0; +int spectranet_w5100_paged_0 = 0, spectranet_w5100_paged_a = 0, + spectranet_w5100_paged_b = 0, spectranet_w5100_paged_3 = 0; +int spectranet_xfs_paged_0 = 0, spectranet_xfs_paged_a = 0, + spectranet_xfs_paged_b = 0, spectranet_xfs_paged_3 = 0; +int spectranet_spectranext_config_paged_0 = 0, + spectranet_spectranext_config_paged_a = 0, + spectranet_spectranext_config_paged_b = 0, + spectranet_spectranext_config_paged_3 = 0; +int spectranet_flash_paged_0 = 0, spectranet_flash_paged_a = 0, + spectranet_flash_paged_b = 0, spectranet_flash_paged_3 = 0; /* Whether the programmable trap is active */ int spectranet_programmable_trap_active; @@ -291,7 +297,7 @@ spectranet_nmi_flipflop( void ) return nmi_flipflop; } -static void +void spectranet_map_page( int dest, int source ) { int i; @@ -306,6 +312,12 @@ spectranet_map_page( int dest, int source ) switch( dest ) { + case 0: + spectranet_w5100_paged_0 = w5100_page; + spectranet_xfs_paged_0 = xfs_page; + spectranet_spectranext_config_paged_0 = spectranext_config_page; + spectranet_flash_paged_0 = flash_page; + break; case 1: spectranet_w5100_paged_a = w5100_page; spectranet_xfs_paged_a = xfs_page; @@ -318,14 +330,32 @@ spectranet_map_page( int dest, int source ) spectranet_spectranext_config_paged_b = spectranext_config_page; spectranet_flash_paged_b = flash_page; break; + case 3: + spectranet_w5100_paged_3 = w5100_page; + spectranet_xfs_paged_3 = xfs_page; + spectranet_spectranext_config_paged_3 = spectranext_config_page; + spectranet_flash_paged_3 = flash_page; + break; } } +uint8_t * +spectranet_ram_page( uint8_t page ) +{ + if( !spectranet_memory_allocated || page < SPECTRANET_RAM_BASE || + page >= SPECTRANET_RAM_BASE + SPECTRANET_RAM_LENGTH / SPECTRANET_PAGE_LENGTH ) + return NULL; + + return spectranet_full_map[ page * MEMORY_PAGES_IN_4K ].page; +} + static void spectranet_hard_reset( void ) { + spectranet_map_page( 0, 0x00 ); spectranet_map_page( 1, 0xff ); /* Map something into 0x1000 to 0x1fff */ spectranet_map_page( 2, 0xff ); /* And 0x2000 to 0x2fff */ + spectranet_map_page( 3, 0xc0 ); spectranet_programmable_trap = 0x0000; spectranet_programmable_trap_active = 0; @@ -338,6 +368,9 @@ spectranet_hard_reset( void ) static void spectranet_reset( int hard_reset ) { + spectranet_map_page( 0, 0x00 ); + spectranet_map_page( 3, 0xc0 ); + if( !periph_is_active( PERIPH_TYPE_SPECTRANET ) ) { spectranet_available = 0; spectranet_paged = 0; @@ -553,6 +586,13 @@ static module_info_t spectranet_module_info = { }; +static void +spectranet_page_0( libspectrum_word port, libspectrum_byte data ) +{ + spectranet_map_page( 0, data ); + memory_map_romcs_full( spectranet_current_map ); +} + static void spectranet_page_a( libspectrum_word port, libspectrum_byte data ) { @@ -567,6 +607,13 @@ spectranet_page_b( libspectrum_word port, libspectrum_byte data ) memory_map_romcs_full( spectranet_current_map ); } +static void +spectranet_page_3( libspectrum_word port, libspectrum_byte data ) +{ + spectranet_map_page( 3, data ); + memory_map_romcs_full( spectranet_current_map ); +} + static libspectrum_byte spectranet_cpld_version( libspectrum_word port, libspectrum_byte *attached ) { @@ -625,6 +672,8 @@ static const periph_port_t spectranet_ports[] = { { 0xffff, 0x023b, spectranet_cpld_version, spectranet_trap }, { 0xffff, 0x033b, spectranet_control_read, spectranet_control_write }, { 0xffff, 0x043b, NULL, spectranext_stdout_write }, + { 0xffff, 0x053b, NULL, spectranet_page_0 }, + { 0xffff, 0x063b, NULL, spectranet_page_3 }, { 0, 0, NULL, NULL } }; @@ -786,11 +835,15 @@ spectranet_get_paging_info( void ) info.paged = spectranet_paged; if( spectranet_memory_allocated ) { + info.page_0 = spectranet_current_map[0 * MEMORY_PAGES_IN_4K].page_num; info.page_a = spectranet_current_map[1 * MEMORY_PAGES_IN_4K].page_num; info.page_b = spectranet_current_map[2 * MEMORY_PAGES_IN_4K].page_num; + info.page_3 = spectranet_current_map[3 * MEMORY_PAGES_IN_4K].page_num; } else { + info.page_0 = 0xff; info.page_a = 0xff; info.page_b = 0xff; + info.page_3 = 0xff; } return info; @@ -1413,7 +1466,7 @@ spectranet_dump_ram( const char *filename GCC_UNUSED ) spectranet_paging_info_t spectranet_get_paging_info( void ) { - spectranet_paging_info_t info = { 0, 0, 0xff, 0xff }; + spectranet_paging_info_t info = { 0, 0, 0xff, 0xff, 0xff, 0xff }; return info; } diff --git a/peripherals/spectranet.h b/peripherals/spectranet.h index 79a89e8d9..35f8363ad 100644 --- a/peripherals/spectranet.h +++ b/peripherals/spectranet.h @@ -61,10 +61,12 @@ typedef struct { } spectranet_config_option_t; typedef struct { - int available; - int paged; - int page_a; - int page_b; + int available; + int paged; + int page_0; + int page_a; + int page_b; + int page_3; } spectranet_paging_info_t; // get currently loaded config @@ -87,6 +89,9 @@ uint16_t spectranet_config_get_total_size(void); bool spectranet_config_is_valid(void); void spectranet_register_startup( void ); +void spectranet_map_page( int dest, int source ); +/* Return the backing storage for a 4K Spectranet RAM page, or NULL. */ +uint8_t *spectranet_ram_page( uint8_t page ); void spectranet_page( int via_io ); void spectranet_nmi( void ); void spectranet_unpage( void ); @@ -105,10 +110,16 @@ void spectranet_flash_rom_write( libspectrum_word address, libspectrum_byte b ); extern int spectranet_available; extern int spectranet_paged; -extern int spectranet_w5100_paged_a, spectranet_w5100_paged_b; -extern int spectranet_xfs_paged_a, spectranet_xfs_paged_b; -extern int spectranet_spectranext_config_paged_a, spectranet_spectranext_config_paged_b; -extern int spectranet_flash_paged_a, spectranet_flash_paged_b; +extern int spectranet_w5100_paged_0, spectranet_w5100_paged_a, + spectranet_w5100_paged_b, spectranet_w5100_paged_3; +extern int spectranet_xfs_paged_0, spectranet_xfs_paged_a, + spectranet_xfs_paged_b, spectranet_xfs_paged_3; +extern int spectranet_spectranext_config_paged_0, + spectranet_spectranext_config_paged_a, + spectranet_spectranext_config_paged_b, + spectranet_spectranext_config_paged_3; +extern int spectranet_flash_paged_0, spectranet_flash_paged_a, + spectranet_flash_paged_b, spectranet_flash_paged_3; extern int spectranet_programmable_trap_active; extern libspectrum_word spectranet_programmable_trap; diff --git a/roms/Makefile.am b/roms/Makefile.am index de318d3bf..a4c3a1d1f 100644 --- a/roms/Makefile.am +++ b/roms/Makefile.am @@ -49,7 +49,8 @@ ROMS = \ roms/trdos.rom \ roms/se-0.rom \ roms/se-1.rom \ - roms/speccyboot-1.4.rom + roms/speccyboot-1.4.rom \ + roms/spxromfs.bin pkgdata_DATA += $(ROMS) diff --git a/roms/spectranet.rom b/roms/spectranet.rom index c98e6c2cb..434c95315 100644 Binary files a/roms/spectranet.rom and b/roms/spectranet.rom differ diff --git a/roms/spxromfs.bin b/roms/spxromfs.bin new file mode 100644 index 000000000..5ad426821 Binary files /dev/null and b/roms/spxromfs.bin differ