diff --git a/.github/workflows/haiku.yml b/.github/workflows/haiku.yml new file mode 100644 index 000000000..59b317803 --- /dev/null +++ b/.github/workflows/haiku.yml @@ -0,0 +1,21 @@ +name: Haiku + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: 💳 Check out repository code + uses: actions/checkout@v4 + - name: ⚒️ Build on Haiku + uses: cross-platform-actions/action@v0.30.0 + with: + operating_system: haiku + version: r1beta5 + sync_files: runner-to-vm + memory: 2G + run: | + pkgman install -y cmake ninja glu_devel libvorbis_devel + cmake . -B build --preset=ci-gcc + cmake --build build --preset ninja-quiet diff --git a/.github/workflows/psp.yml b/.github/workflows/psp.yml new file mode 100644 index 000000000..d97bbbf2b --- /dev/null +++ b/.github/workflows/psp.yml @@ -0,0 +1,20 @@ +name: PSP + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + container: + image: pspdev/pspdev:latest + volumes: + - ${{ github.workspace }}:/src + steps: + - name: 🎮 Setup tools + run: apk add ninja-build + - name: 💳 Check out repository code + uses: actions/checkout@v4 + - name: ⚒️ Build with gcc + run: | + cmake . -B build --preset=ci-psp + cmake --build build --preset ninja-quiet diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..cf3f93542 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,89 @@ +name: Tests + +on: [push, pull_request] + +jobs: + test: + strategy: + fail-fast: false + matrix: + os: [windows-latest] + arch: [x64, x86] + include: + - os: ubuntu-latest + arch: x64 + defaults: + run: + shell: bash + runs-on: ${{ matrix.os }} + steps: + - name: 💳 Check out repository code + uses: actions/checkout@v4 + - name: 💾 Cache dependencies on Windows + if: runner.os == 'Windows' + uses: actions/cache@v4 + with: + path: | + C:\msys64\var\cache\pacman\pkg + C:\vcpkg\installed + key: build-dep-windows-${{ matrix.arch }} + - name: 🐧 Install dependencies on Linux + if: runner.os == 'Linux' + run: >- + sudo apt-get install -qq -y -o=Dpkg::Use-Pty=0 + cmake + pkgconf + libx11-dev + libasound2-dev + libxxf86dga-dev + libjack-dev + libgl-dev + libglu-dev + libpng-dev + zlib1g-dev + libvorbis-dev + - name: 🪟 Set up environment variables on Windows + env: + MSYSTEM: ${{ matrix.arch == 'x64' && 'MINGW64' || 'MINGW32' }} + if: runner.os == 'Windows' + run: | + echo "VCPKG_ROOT=C:/vcpkg" >> $GITHUB_ENV + echo "MSYSTEM=${{ env.MSYSTEM }}" >> $GITHUB_ENV + - name: 🪟 Install dependencies on Windows + if: runner.os == 'Windows' + shell: pwsh + run: vcpkg install --triplet ${{ matrix.arch }}-windows libvorbis libpng + - name: ⚒️ Build with Visual Studio on Windows + env: + sdkPath: "C:/Program Files (x86)/Windows Kits/10" + sdkVer: "10.0.26100.0" + arch: ${{ matrix.arch }} + shell: pwsh + if: ${{ runner.os == 'Windows' && !cancelled() }} + run: | + cmake . -B build_vs -A ${{ matrix.arch == 'x64' && 'x64' || 'Win32' }} --preset=ci-vs + cmake --build build_vs --config Debug -- /verbosity:quiet + - name: 🔍 Add MSYS2 to path on Windows + if: ${{ runner.os == 'Windows' && !cancelled() }} + shell: pwsh + run: | + echo "C:\msys64\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + echo "C:\msys64\${{ matrix.arch == 'x64' && 'mingw64' || 'mingw32' }}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + - name: 🪟 Install msys2 dependencies on Windows + env: + arch: ${{ matrix.arch == 'x64' && 'x86_64' || 'i686' }} + if: ${{ runner.os == 'Windows' && !cancelled() }} + run: >- + pacman --noconfirm -S + mingw-w64-${{ env.arch }}-gcc + mingw-w64-${{ env.arch }}-ninja + mingw-w64-${{ env.arch }}-cmake + mingw-w64-${{ env.arch }}-libpng + mingw-w64-${{ env.arch }}-libvorbis + - name: ⚒️ Build with gcc + env: + MINGDIR: "C:/msys64/${{ matrix.arch == 'x64' && 'mingw64' || 'mingw32' }}" + if: ${{ !cancelled() }} + run: | + cmake . -B build --preset=ci-gcc + cmake --build build --preset=ninja-quiet diff --git a/.github/workflows/xc.yml b/.github/workflows/xc.yml new file mode 100644 index 000000000..332b91d92 --- /dev/null +++ b/.github/workflows/xc.yml @@ -0,0 +1,30 @@ +name: Cross compilation + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: 💳 Check out repository code + uses: actions/checkout@v4 + - name: 🐧 Setup + run: >- + sudo apt-get install -qq -y -o=Dpkg::Use-Pty=0 + mingw-w64-x86-64-dev + binutils-mingw-w64-x86-64 + gcc-mingw-w64-x86-64-win32 + g++-mingw-w64-x86-64-win32 + - name: 💾 Cache vcpkg dependencies + uses: actions/cache@v4 + with: + path: /usr/local/share/vcpkg/installed + key: vcpkg-installed + - name: 🌳 Install dependencies + run: | + echo VCPKG_ROOT=/usr/local/share/vcpkg >> $GITHUB_ENV + vcpkg install --triplet=x64-mingw-dynamic libpng libvorbis + - name: ⚒️ Build with gcc + run: | + cmake . -B build --preset=ci-xc + cmake --build build --preset ninja-quiet diff --git a/CMakeLists.txt b/CMakeLists.txt index 99794e671..3748f19d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,9 +22,10 @@ # CMake setup # -cmake_minimum_required(VERSION 2.6 FATAL_ERROR) +cmake_minimum_required(VERSION 3.12...4.0) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) + cmake_policy(SET CMP0048 NEW) endif(COMMAND cmake_policy) if(NOT CMAKE_BUILD_TYPE) @@ -37,13 +38,41 @@ endif() # Note: This needs to be done before the project command set(CMAKE_CONFIGURATION_TYPES "${CMAKE_BUILD_TYPE}" CACHE INTERNAL "internal") +#-----------------------------------------------------------------------------# +# +# Version +# +#-----------------------------------------------------------------------------# + +set(ALLEGRO_VERSION_REGEX_PATTERN "#define ALLEGRO_VERSION_STR[ ]+\"([0-9]+\\.[0-9]+\\.[0-9]+).*\"") +file(STRINGS "${CMAKE_CURRENT_LIST_DIR}/include/allegro/base.h" ALLEGRO_VERSION_MATCH + REGEX ${ALLEGRO_VERSION_REGEX_PATTERN} + LIMIT_COUNT 1 +) +string(REGEX REPLACE ${ALLEGRO_VERSION_REGEX_PATTERN} "\\1" ALLEGRO_VERSION "${ALLEGRO_VERSION_MATCH}") +if("${ALLEGRO_VERSION}" VERSION_LESS 5.0.0) + message(STATUS "[Allegro] Allegro Version: [${ALLEGRO_VERSION}]") +else() + message(FATAL_ERROR "[Allegro] Invalid Allegro Version: [${ALLEGRO_VERSION}]") +endif() + #-----------------------------------------------------------------------------# # # Build options # # Set the project name. -project(ALLEGRO C CXX) + +# Allow generating custom project name via command-line arguments (#1174) +set(ALLEGRO_PROJECT_NAME "ALLEGRO" CACHE STRING "Project default name") +set(ALLEGRO_PROJECT_SUFFIX "" CACHE STRING "Project suffix") + +project(${ALLEGRO_PROJECT_NAME}${ALLEGRO_PROJECT_SUFFIX} + VERSION ${ALLEGRO_VERSION} + LANGUAGES C CXX + DESCRIPTION "Allegro project" + HOMEPAGE_URL "https://github.com/liballeg/allegro4" +) if(WIN32) if(MINGW) @@ -291,12 +320,14 @@ if(APPLE) endif(COMPILER_GCC) endif(APPLE) +if(CMAKE_SYSTEM_NAME STREQUAL Haiku) + set(ALLEGRO_HAIKU 1) + set(BEOS 1) +elseif(CMAKE_SYSTEM_NAME STREQUAL BeOS) + set(ALLEGRO_BEOS 1) + set(BEOS 1) +endif(CMAKE_SYSTEM_NAME STREQUAL Haiku) if(BEOS) - if(CMAKE_SYSTEM_NAME STREQUAL Haiku) - set(ALLEGRO_HAIKU 1) - else(CMAKE_SYSTEM_NAME STREQUAL Haiku) - set(ALLEGRO_BEOS 1) - endif(CMAKE_SYSTEM_NAME STREQUAL Haiku) set(WFLAGS "-W -Wall -Wno-unused -Wno-multichar") set(WFLAGS_C_ONLY "") set(WFLAGS_CXX_ONLY "-Wno-ctor-dtor-privacy") @@ -308,8 +339,7 @@ endif() if(PSP) set(ALLEGRO_PSP 1) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -G0") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -G0 -fno-exceptions -fno-rtti") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti") endif(PSP) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WFLAGS} ${WFLAGS_C_ONLY}") @@ -695,10 +725,8 @@ endif(ALLEGRO_MACOSX) if(PSP) include_directories(SYSTEM ${PSPSDK_PATH}/include) - link_directories(${PSPSDK_PATH}/lib) + add_link_options("-L${PSPSDK_PATH}/lib") list(APPEND PLATFORM_SOURCES ${ALLEGRO_SRC_PSP_FILES}) - list(APPEND PLATFORM_LIBS - m pspaudio pspgu psprtc pspdebug pspdisplay pspge pspctrl pspsdk c pspnet pspnet_inet pspnet_resolver psputility pspuser pspkernel) endif(PSP) #-----------------------------------------------------------------------------# @@ -844,6 +872,8 @@ set_target_properties(allegro static_link_with "${static_link_with}" ) +set(PKG_TARGETS_NAME "${PKG_NAME}Targets") + install_our_library(allegro) if(NOT WANT_FRAMEWORKS) install_our_headers(${ALLEGRO_PUBLIC_HEADERS}) @@ -871,7 +901,7 @@ if(PSP) OUTPUT_NAME alleg-main${BUILD_TYPE_SUFFIX} COMPILE_FLAGS -DALLEGRO_SRC ) - target_link_libraries(alleg-main pspuser pspkernel) + target_link_libraries(alleg-main INTERFACE c pspaudio pspdisplay pspctrl pspdebug pspgu pspge) target_link_libraries(allegro alleg-main) install_our_library(alleg-main) endif(PSP) @@ -881,7 +911,7 @@ endif(PSP) # allegro-config script # -if(UNIX) # including MACOSX +if(UNIX OR MSYS OR MINGW) # including MACOSX set(prefix "${CMAKE_INSTALL_PREFIX}") set(INCLUDE_PREFIX "${CMAKE_INSTALL_PREFIX}") # not sure what this is if(BUILD_SHARED_LIBS) @@ -889,7 +919,7 @@ if(UNIX) # including MACOSX else() set(LINK_WITH_STATIC_LIBS yes) endif() - set(LIB_TO_LINK alleg${BUILD_TYPE_SUFFIX}) + set(LIB_TO_LINK ${allegro_OUTPUT_NAME}${BUILD_TYPE_SUFFIX}) if(APPLE) set(LDFLAGS "-framework Cocoa -lalleg-main") else(APPLE) @@ -923,7 +953,7 @@ if(UNIX) # including MACOSX install(PROGRAMS ${CMAKE_BINARY_DIR}/allegro-config DESTINATION bin ) -endif(UNIX) +endif(UNIX OR MSYS OR MINGW) #-----------------------------------------------------------------------------# # @@ -947,6 +977,7 @@ endif() if(WANT_ALLEGROGL) + find_package(OpenGL) add_subdirectory(addons/allegrogl) endif() if(WANT_LOADPNG) @@ -972,7 +1003,7 @@ set(PKG_CONFIG_FILES logg ) -if(UNIX) +if(UNIX OR MSYS) set(prefix "${CMAKE_INSTALL_PREFIX}") set(INCLUDE_PREFIX "\${prefix}") set(bindir "\${exec_prefix}/bin") @@ -997,7 +1028,53 @@ if(UNIX) DESTINATION "lib${LIB_SUFFIX}/pkgconfig" ) endforeach(name) -endif(UNIX) +endif(UNIX OR MSYS) + +set(ALLEGRO_TARGETS ${PKG_CONFIG_FILES}) +# Generate CMake package-config files +include(CMakePackageConfigHelpers) +include(GNUInstallDirs) + +set(PKG_NAME "Allegro") +string(TOLOWER ${PKG_NAME} PKG_NAME_LOWER) + +set(PKG_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PKG_NAME_LOWER}4") +set(PKG_GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/cmake") +set(PKG_CONFIG_FILE "${PKG_GENERATED_DIR}/${PKG_NAME}Config.cmake") +set(PKG_VERSION_FILE "${PKG_GENERATED_DIR}/${PKG_NAME}ConfigVersion.cmake") + +configure_package_config_file( + "${CMAKE_CURRENT_LIST_DIR}/cmake/${PKG_NAME}Config.cmake.in" + ${PKG_CONFIG_FILE} + INSTALL_DESTINATION ${PKG_CONFIG_INSTALL_DIR} + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO +) +write_basic_package_version_file(${PKG_VERSION_FILE} + VERSION ${ALLEGRO_VERSION} + COMPATIBILITY SameMajorVersion +) +install( + EXPORT ${PKG_TARGETS_NAME} + NAMESPACE ${PKG_NAME}:: + DESTINATION ${PKG_CONFIG_INSTALL_DIR} +) +install( + FILES ${PKG_CONFIG_FILE} ${PKG_VERSION_FILE} + DESTINATION ${PKG_CONFIG_INSTALL_DIR} +) + +# Export build tree for debugging + +target_include_directories(allegro INTERFACE + $ + $ +) + +export(EXPORT ${PKG_TARGETS_NAME} + FILE "${PKG_GENERATED_DIR}/${PKG_NAME}Targets.cmake" + NAMESPACE ${PKG_NAME}:: +) #-----------------------------------------------------------------------------# # diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 000000000..27e394e6d --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,67 @@ +{ + "version": 3, + "configurePresets": [ + { + "name": "ci-vs", + "generator": "Visual Studio 17 2022", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", + "CMAKE_BUILD_TYPE": "Debug;RelWithDebInfo", + "DSOUND_INCLUDE_DIR": "$env{sdkPath}/Include/$env{sdkVer}/um", + "DSOUND_LIBRARY": "$env{sdkPath}/Lib/$env{sdkVer}/um/$env{arch}/dsound.lib", + "DXGUID_LIBRARY": "$env{sdkPath}/Lib/$env{sdkVer}/um/$env{arch}/dxguid.lib", + "DDRAW_INCLUDE_DIR": "$env{sdkPath}/Include/$env{sdkVer}/um", + "DDRAW_LIBRARY": "$env{sdkPath}/Lib/$env{sdkVer}/um/$env{arch}/ddraw.lib", + "DINPUT_INCLUDE_DIR": "$env{sdkPath}/Include/$env{sdkVer}/um", + "DINPUT_LIBRARY": "$env{sdkPath}/Lib/$env{sdkVer}/um/$env{arch}/dinput8.lib", + "CMAKE_C_FLAGS": "/W4 /we4311 /we4133 /we4022 /we4312 /we4047 /we4365 /wd4018 /wd4245 /wd4389 /wd4100 /wd4127 /wd4152 /wd4210 /wd4459 /wd4232 /wd4267 /we4005", + "WANT_DOCS": false, + "WANT_EXAMPLES": true, + "WANT_TESTS": true + } + }, + { + "name": "ci-gcc", + "generator": "Ninja", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "STRICT_WARN": false, + "CMAKE_C_FLAGS": "-Wall -Werror=pointer-to-int-cast -Werror=int-to-pointer-cast -Werror=pointer-arith", + "WANT_DOCS": false, + "WANT_EXAMPLES": true, + "WANT_TESTS": true + } + }, + { + "name": "ci-xc", + "inherits": "ci-gcc", + "environment": { + "MINGDIR": "/usr/x86_64-w64-mingw32" + }, + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", + "VCPKG_CHAINLOAD_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/toolchains/mingw.cmake", + "VCPKG_TARGET_TRIPLET": "x64-mingw-dynamic", + "VCPKG_TARGET_ARCHITECTURE": "x64" + } + }, + { + "name": "ci-psp", + "inherits": "ci-gcc", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/cmake/Toolchain-psp-gcc.cmake", + "CMAKE_MAKE_PROGRAM": "/usr/lib/ninja-build/bin/ninja", + "SHARED": false, + "WANT_TOOLS": false, + "WANT_ALLEGROGL": false + } + } + ], + "buildPresets": [ + { + "name": "ninja-quiet", + "configurePreset": "ci-gcc", + "nativeToolOptions": ["--quiet"] + } + ] +} diff --git a/addons/allegrogl/CMakeLists.txt b/addons/allegrogl/CMakeLists.txt index 36cfcc3fc..b6953cc9f 100644 --- a/addons/allegrogl/CMakeLists.txt +++ b/addons/allegrogl/CMakeLists.txt @@ -3,11 +3,10 @@ # AllegroGL # -find_package(OpenGL) if(NOT OPENGL_FOUND) return() endif() -if(UNIX AND NOT APPLE) +if(UNIX AND NOT APPLE AND NOT BEOS) find_package(X11) if(NOT X11_FOUND) return() @@ -26,7 +25,7 @@ if(DLOPEN_LIB) endif() if(ALLEGRO_WITH_XWINDOWS) - set(CMAKE_REQUIRED_LIBRARIES ${OPENGL_gl_LIBRARY}) + set(CMAKE_REQUIRED_LIBRARIES OpenGL::GL) check_function_exists(glXGetProcAddress GLXGETPROCADDRESS_FOUND) if(NOT GLXGETPROCADDRESS_FOUND) check_function_exists(glXGetProcAddressARB GLXGETPROCADDRESSARB_FOUND) @@ -40,6 +39,9 @@ if(ALLEGRO_WITH_XWINDOWS) endif(ALLEGRO_WITH_XWINDOWS) # XXX Mesa generic driver support? +if(PSP OR BEOS) + set(ALLEGROGL_GENERIC_DRIVER 1) +endif(PSP OR BEOS) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/include/allegrogl/alleggl_config.h.cmake @@ -132,6 +134,11 @@ add_our_library(allegrogl ${ADDON_LINKAGE} ${ALLEGROGL_HEADERS} ) +target_compile_definitions(allegrogl + PRIVATE ALLEGRO_GL_SRC_BUILD + PUBLIC $<$:ALLEGRO_GL_DYNAMIC> + ) + set_target_properties(allegrogl PROPERTIES COMPILE_FLAGS -DALLEGRO_GL_SRC_BUILD @@ -178,7 +185,7 @@ function(add_our_example nm) PROPERTIES OUTPUT_NAME examp/${nm} ) - target_link_libraries(${nm}_agl allegrogl) + target_link_libraries(${nm}_agl allegrogl OpenGL::GL) endfunction() if(WANT_EXAMPLES) diff --git a/addons/allegrogl/include/alleggl.h b/addons/allegrogl/include/alleggl.h index fa36c9844..5fd5cd344 100644 --- a/addons/allegrogl/include/alleggl.h +++ b/addons/allegrogl/include/alleggl.h @@ -76,7 +76,7 @@ typedef __int64 INT64; #include "allegrogl/gl_ext.h" -#ifdef ALLEGRO_WITH_XWINDOWS +#if defined(ALLEGRO_WITH_XWINDOWS) || defined(ALLEGRO_PSP) || defined(ALLEGRO_HAIKU) #if (ALLEGRO_SUB_VERSION == 2) && (ALLEGRO_WIP_VERSION < 2) # ifndef HAVE_LIBPTHREAD # error AllegroGL requires Allegro to have pthread support enabled! diff --git a/addons/allegrogl/src/win.c b/addons/allegrogl/src/win.c index 7cac95dfb..30bb8959e 100644 --- a/addons/allegrogl/src/win.c +++ b/addons/allegrogl/src/win.c @@ -1557,7 +1557,7 @@ static BITMAP *allegro_gl_win_init(int w, int h, int v_w, int v_h) if (fullscreen) { SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, - 0, (LPVOID)lock_time, + 0, (LPVOID)(uintptr_t)lock_time, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE); } #undef SPI_GETFOREGROUNDLOCKTIMEOUT diff --git a/addons/jpgalleg/CMakeLists.txt b/addons/jpgalleg/CMakeLists.txt index 5f2b0cf35..163345527 100644 --- a/addons/jpgalleg/CMakeLists.txt +++ b/addons/jpgalleg/CMakeLists.txt @@ -37,6 +37,11 @@ add_our_library(jpgalleg ${ADDON_LINKAGE} ${JPGALLEG_HEADERS} ) +target_compile_definitions(jpgalleg + PRIVATE JPGALLEG_SRC_BUILD + PUBLIC $<$:JPGALLEG_DYNAMIC> + ) + set_target_properties(jpgalleg PROPERTIES LINK_FLAGS "${ALLEGRO_LINK_FLAGS}" diff --git a/addons/loadpng/CMakeLists.txt b/addons/loadpng/CMakeLists.txt index ecb5298c0..05113f240 100644 --- a/addons/loadpng/CMakeLists.txt +++ b/addons/loadpng/CMakeLists.txt @@ -31,6 +31,11 @@ add_our_library(loadpng ${ADDON_LINKAGE} ${LOADPNG_HEADERS} ) +target_compile_definitions(loadpng + PRIVATE LOADPNG_SRC_BUILD + PUBLIC $<$:LOADPNG_DYNAMIC> + ) + set_target_properties(loadpng PROPERTIES LINK_FLAGS "${ALLEGRO_LINK_FLAGS}" @@ -78,8 +83,8 @@ endfunction() if(WANT_EXAMPLES) add_our_example(example) - add_our_example(exalpha) - add_our_example(exdata) + add_our_example(exalpha2) + add_our_example(exdata2) add_our_example(browse) copy_files(copy_loadpng_example_data diff --git a/addons/loadpng/examples/exalpha.c b/addons/loadpng/examples/exalpha2.c similarity index 100% rename from addons/loadpng/examples/exalpha.c rename to addons/loadpng/examples/exalpha2.c diff --git a/addons/loadpng/examples/exdata.c b/addons/loadpng/examples/exdata2.c similarity index 100% rename from addons/loadpng/examples/exdata.c rename to addons/loadpng/examples/exdata2.c diff --git a/addons/logg/CMakeLists.txt b/addons/logg/CMakeLists.txt index d32b0ea8d..33a61d4cd 100644 --- a/addons/logg/CMakeLists.txt +++ b/addons/logg/CMakeLists.txt @@ -28,6 +28,11 @@ add_our_library(logg ${ADDON_LINKAGE} ${LOGG_HEADERS} ) +target_compile_definitions(logg + PRIVATE LOGG_SRC_BUILD + PUBLIC $<$:LOGG_DYNAMIC> + ) + set_target_properties(logg PROPERTIES LINK_FLAGS "${ALLEGRO_LINK_FLAGS}" @@ -56,6 +61,8 @@ endif(NOT WANT_FRAMEWORKS) # if(WANT_EXAMPLES) + add_compile_definitions(ALLEGRO_USE_CONSOLE) + add_executable(play_ogg play_ogg.c) target_link_libraries(play_ogg logg) diff --git a/cmake/AllegroConfig.cmake.in b/cmake/AllegroConfig.cmake.in new file mode 100644 index 000000000..162f330ca --- /dev/null +++ b/cmake/AllegroConfig.cmake.in @@ -0,0 +1,24 @@ +# +# Allegro Package Config +# +@PACKAGE_INIT@ + +set(ALLEGRO_PKG_BUGREPORT "@PROJECT_HOMEPAGE_URL@/issues") + +# Allegro Targets +set(ALLEGRO_PKG_TARGETS "@ALLEGRO_TARGETS@") + +# Allegro Package Version +set(ALLEGRO_PKG_VERSION_MAJOR @PROJECT_VERSION_MAJOR@) +set(ALLEGRO_PKG_VERSION_MINOR @PROJECT_VERSION_MINOR@) +set(ALLEGRO_PKG_VERSION_PATCH @PROJECT_VERSION_PATCH@) +set(ALLEGRO_PKG_VERSION @PROJECT_VERSION@) + +# Architecture, compiler and other low level flags +set(ALLEGRO_PKG_LIBRARY_ARCHITECTURE "@CMAKE_LIBRARY_ARCHITECTURE@") +set(ALLEGRO_PKG_COMPILER "@CMAKE_C_COMPILER_ID@") +set(ALLEGRO_PKG_COMPILER_VERSION "@CMAKE_C_COMPILER_VERSION@") +set(ALLEGRO_PKG_HOST_SYSTEM "@CMAKE_HOST_SYSTEM@") + +# Targets +include("${CMAKE_CURRENT_LIST_DIR}/@PKG_TARGETS_NAME@.cmake") diff --git a/cmake/Common.cmake b/cmake/Common.cmake index 41822dd6a..482d85230 100644 --- a/cmake/Common.cmake +++ b/cmake/Common.cmake @@ -26,6 +26,7 @@ endfunction(set_our_framework_properties) function(install_our_library target) install(TARGETS ${target} + EXPORT ${PKG_TARGETS_NAME} LIBRARY DESTINATION "lib${LIB_SUFFIX}" ARCHIVE DESTINATION "lib${LIB_SUFFIX}" FRAMEWORK DESTINATION "${FRAMEWORK_INSTALL_PREFIX}" @@ -64,7 +65,7 @@ function(sanitize_cmake_link_flags return) # Watch out for -framework options (OS X) IF (NOT lib MATCHES "-framework.*|.*framework") # Remove absolute path. - string(REGEX REPLACE "/.*/(.*)" "\\1" lib ${lib}) + string(REGEX REPLACE "([A-Z]:)?/.*/(.*)" "\\2" lib ${lib}) # Remove .a/.so/.dylib. string(REGEX REPLACE "lib(.*)\\.(a|so|dylib)" "\\1" lib ${lib}) diff --git a/cmake/FindDDraw.cmake b/cmake/FindDDraw.cmake index af464d25d..41c2ebe16 100644 --- a/cmake/FindDDraw.cmake +++ b/cmake/FindDDraw.cmake @@ -29,7 +29,7 @@ find_library(DDRAW_LIBRARY # Handle the QUIETLY and REQUIRED arguments and set DDRAW_FOUND to TRUE if # all listed variables are TRUE. include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(DDRAW DEFAULT_MSG +find_package_handle_standard_args(DDraw DEFAULT_MSG DDRAW_INCLUDE_DIR DDRAW_LIBRARY) if(DDRAW_FOUND) diff --git a/cmake/FindDInput.cmake b/cmake/FindDInput.cmake index 4c9ad3072..31c5ced09 100644 --- a/cmake/FindDInput.cmake +++ b/cmake/FindDInput.cmake @@ -29,7 +29,7 @@ find_library(DINPUT_LIBRARY # Handle the QUIETLY and REQUIRED arguments and set DINPUT_FOUND to TRUE if # all listed variables are TRUE. include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(DINPUT DEFAULT_MSG +find_package_handle_standard_args(DInput DEFAULT_MSG DINPUT_INCLUDE_DIR DINPUT_LIBRARY) if(DINPUT_FOUND) diff --git a/cmake/FindDSound.cmake b/cmake/FindDSound.cmake index 40972a464..7e288d615 100644 --- a/cmake/FindDSound.cmake +++ b/cmake/FindDSound.cmake @@ -27,7 +27,7 @@ find_library(DSOUND_LIBRARY NAMES dsound # Handle the QUIETLY and REQUIRED arguments and set DSOUND_FOUND to TRUE if # all listed variables are TRUE. include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(DSOUND DEFAULT_MSG +find_package_handle_standard_args(DSound DEFAULT_MSG DSOUND_INCLUDE_DIR DSOUND_LIBRARY) if(DSOUND_FOUND) diff --git a/cmake/FindDXGuid.cmake b/cmake/FindDXGuid.cmake index 6426e25e9..ec6917c51 100644 --- a/cmake/FindDXGuid.cmake +++ b/cmake/FindDXGuid.cmake @@ -16,7 +16,7 @@ endif() # Handle the QUIETLY and REQUIRED arguments and set DXGUID_FOUND to TRUE if # all listed variables are TRUE. include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(DXGUID DEFAULT_MSG +find_package_handle_standard_args(DXGuid DEFAULT_MSG DXGUID_LIBRARY) if(DXGUID_FOUND) diff --git a/cmake/FindVorbis.cmake b/cmake/FindVorbis.cmake index 46e990761..66614e16c 100644 --- a/cmake/FindVorbis.cmake +++ b/cmake/FindVorbis.cmake @@ -18,7 +18,7 @@ if(NOT GP2XWIZ) # Handle the QUIETLY and REQUIRED arguments and set VORBIS_FOUND # to TRUE if all listed variables are TRUE. include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(VORBIS DEFAULT_MSG + find_package_handle_standard_args(Vorbis DEFAULT_MSG OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY) else(NOT GP2XWIZ) diff --git a/cmake/Toolchain-mingw.cmake b/cmake/Toolchain-mingw.cmake deleted file mode 100644 index a3d6c0eb5..000000000 --- a/cmake/Toolchain-mingw.cmake +++ /dev/null @@ -1,66 +0,0 @@ -# Use this command to build the Windows port of Allegro -# with a mingw cross compiler: -# -# cmake -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-mingw.cmake . -# -# or for out of source: -# -# cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw.cmake .. -# -# You will need at least CMake 2.6.0. -# -# Adjust the following paths to suit your environment. -# -# You might want to set MINGDIR to prevent make install making a mess -# in your normal directories. -# -# This file was based on http://www.cmake.org/Wiki/CmakeMingw - -# the name of the target operating system -set(CMAKE_SYSTEM_NAME Windows) - -# Assume the target architecture. -# XXX for some reason the value set here gets cleared before we reach the -# main CMakeLists.txt; see that file for a workaround. -# set(CMAKE_SYSTEM_PROCESSOR i686) - -# Which compilers to use for C and C++, and location of target -# environment. -if(EXISTS /usr/i586-mingw32msvc) - # First look in standard location as used by Debian/Ubuntu/etc. - set(CMAKE_C_COMPILER i586-mingw32msvc-gcc) - set(CMAKE_CXX_COMPILER i586-mingw32msvc-g++) - set(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc) -elseif(EXISTS /opt/mingw) - # Otherwise you can get a MinGW environment using the script at - # . It downloads and builds MinGW and - # most of the dependencies for you. This is a suitable location. - set(CMAKE_C_COMPILER /opt/mingw/usr/bin/i686-pc-mingw32-gcc) - set(CMAKE_CXX_COMPILER /opt/mingw/usr/bin/i686-pc-mingw32-g++) - set(CMAKE_FIND_ROOT_PATH /opt/mingw/usr/i686-pc-mingw32) -else() - # Else fill in local path which the user will likely adjust. - # This is the location assumed by - set(CMAKE_C_COMPILER /usr/local/cross-tools/bin/i386-mingw32-gcc) - set(CMAKE_CXX_COMPILER /usr/local/cross-tools/bin/i386-mingw32-g++) - set(CMAKE_FIND_ROOT_PATH /usr/local/cross-tools) -endif() - -# Adjust the default behaviour of the FIND_XXX() commands: -# search headers and libraries in the target environment, search -# programs in the host environment -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -# Tell pkg-config not to look at the target environment's .pc files. -# Setting PKG_CONFIG_LIBDIR sets the default search directory, but we have to -# set PKG_CONFIG_PATH as well to prevent pkg-config falling back to the host's -# path. -set(ENV{PKG_CONFIG_LIBDIR} ${CMAKE_FIND_ROOT_PATH}/lib/pkgconfig) -set(ENV{PKG_CONFIG_PATH} ${CMAKE_FIND_ROOT_PATH}/lib/pkgconfig) - -set(INSTALL_PREFIX ${CMAKE_FIND_ROOT_PATH}) -if(ENV{MINGDIR} STREQUAL "") - set(ENV{MINGDIR} ${CMAKE_FIND_ROOT_PATH}) -endif() diff --git a/cmake/Toolchain-psp-gcc.cmake b/cmake/Toolchain-psp-gcc.cmake index 84a220cb8..119d07339 100644 --- a/cmake/Toolchain-psp-gcc.cmake +++ b/cmake/Toolchain-psp-gcc.cmake @@ -71,149 +71,3 @@ function(add_psp_executable nm) endfunction() set(PSP 1) -# Use this command to build the PSP port of Allegro: -# -# cmake -DWANT_TESTS=off -DWANT_TOOLS=off -DWANT_LOGG=off -DWANT_ALLEGROGL=off -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-psp-gcc.cmake . -# -# or for out of source: -# -# cmake -DWANT_TESTS=off -DWANT_TOOLS=off -DWANT_LOGG=off -DWANT_ALLEGROGL=off -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-psp-gcc.cmake .. -# -# You will need at least CMake 2.6.0. -# -# Adjust the following paths to suit your environment. -# -# This file was based on http://www.cmake.org/Wiki/CmakeMingw - -# The name of the target operating system. -set(CMAKE_SYSTEM_NAME Generic) - -# Location of target environment. -find_program(psp-config_SCRIPT psp-config) -if (psp-config_SCRIPT) - execute_process(COMMAND ${psp-config_SCRIPT} - ARGS --psp-prefix - OUTPUT_VARIABLE PSP_PREFIX - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${psp-config_SCRIPT} - ARGS --pspsdk-path - OUTPUT_VARIABLE PSPSDK_PATH - OUTPUT_STRIP_TRAILING_WHITESPACE) -else (psp-config_SCRIPT) - message(FATAL_ERROR "psp-config was not found.\nInstall the PSPDEV toolchain or update the $PATH environment variable.") -endif (psp-config_SCRIPT) - -set(CMAKE_SYSTEM_INCLUDE_PATH "${PSP_PREFIX}/include") -set(CMAKE_SYSTEM_LIBRARY_PATH "${PSP_PREFIX}/lib") -set(CMAKE_SYSTEM_PROGRAM_PATH "${PSP_PREFIX}/bin") - -# Which compilers to use for C and C++. -set(CMAKE_C_COMPILER psp-gcc) -set(CMAKE_CXX_COMPILER psp-g++) - -# Needed to pass the compiler tests. -set(LINK_DIRECTORIES ${PSPSDK_PATH}/lib) -set(LINK_LIBRARIES -lc -lpspuser -lpspkernel -lc) - -# Adjust the default behaviour of the FIND_XXX() commands: -# search headers and libraries in the target environment, search -# programs in the host environment. -set(CMAKE_FIND_ROOT_PATH ${PSP_PREFIX}) -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -# After building the ELF binary build the PSP executable. -function(add_psp_executable nm) - get_target_property(PSP_EXECUTABLE_OUTPUT_NAME ${nm} OUTPUT_NAME) - if (NOT PSP_EXECUTABLE_OUTPUT_NAME) - set(PSP_EXECUTABLE_OUTPUT_NAME ${nm}) - endif(NOT PSP_EXECUTABLE_OUTPUT_NAME) - set_target_properties( - ${nm} - PROPERTIES LINK_FLAGS "-specs=${PSPSDK_PATH}/lib/prxspecs -Wl,-q,-T${PSPSDK_PATH}/lib/linkfile.prx ${PSPSDK_PATH}/lib/prxexports.o" - ) - add_custom_command( - TARGET ${nm} - POST_BUILD - COMMAND psp-fixup-imports ${PSP_EXECUTABLE_OUTPUT_NAME} - COMMAND mksfo '${PSP_EXECUTABLE_OUTPUT_NAME}' PARAM.SFO - COMMAND psp-prxgen ${PSP_EXECUTABLE_OUTPUT_NAME} ${PSP_EXECUTABLE_OUTPUT_NAME}.prx - COMMAND pack-pbp EBOOT.PBP PARAM.SFO NULL NULL NULL NULL NULL ${PSP_EXECUTABLE_OUTPUT_NAME}.prx NULL - ) -endfunction() - -set(PSP 1) -# Use this command to build the PSP port of Allegro: -# -# cmake -DWANT_TESTS=off -DWANT_TOOLS=off -DWANT_LOGG=off -DWANT_ALLEGROGL=off -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-psp-gcc.cmake . -# -# or for out of source: -# -# cmake -DWANT_TESTS=off -DWANT_TOOLS=off -DWANT_LOGG=off -DWANT_ALLEGROGL=off -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-psp-gcc.cmake .. -# -# You will need at least CMake 2.6.0. -# -# Adjust the following paths to suit your environment. -# -# This file was based on http://www.cmake.org/Wiki/CmakeMingw - -# The name of the target operating system. -set(CMAKE_SYSTEM_NAME Generic) - -# Location of target environment. -find_program(psp-config_SCRIPT psp-config) -if (psp-config_SCRIPT) - execute_process(COMMAND ${psp-config_SCRIPT} - ARGS --psp-prefix - OUTPUT_VARIABLE PSP_PREFIX - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${psp-config_SCRIPT} - ARGS --pspsdk-path - OUTPUT_VARIABLE PSPSDK_PATH - OUTPUT_STRIP_TRAILING_WHITESPACE) -else (psp-config_SCRIPT) - message(FATAL_ERROR "psp-config was not found.\nInstall the PSPDEV toolchain or update the $PATH environment variable.") -endif (psp-config_SCRIPT) - -set(CMAKE_SYSTEM_INCLUDE_PATH "${PSP_PREFIX}/include") -set(CMAKE_SYSTEM_LIBRARY_PATH "${PSP_PREFIX}/lib") -set(CMAKE_SYSTEM_PROGRAM_PATH "${PSP_PREFIX}/bin") - -# Which compilers to use for C and C++. -set(CMAKE_C_COMPILER psp-gcc) -set(CMAKE_CXX_COMPILER psp-g++) - -# Needed to pass the compiler tests. -set(LINK_DIRECTORIES ${PSPSDK_PATH}/lib) -set(LINK_LIBRARIES -lc -lpspuser -lpspkernel -lc) - -# Adjust the default behaviour of the FIND_XXX() commands: -# search headers and libraries in the target environment, search -# programs in the host environment. -set(CMAKE_FIND_ROOT_PATH ${PSP_PREFIX}) -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -# After building the ELF binary build the PSP executable. -function(add_psp_executable nm) - get_target_property(PSP_EXECUTABLE_OUTPUT_NAME ${nm} OUTPUT_NAME) - if (NOT PSP_EXECUTABLE_OUTPUT_NAME) - set(PSP_EXECUTABLE_OUTPUT_NAME ${nm}) - endif(NOT PSP_EXECUTABLE_OUTPUT_NAME) - set_target_properties( - ${nm} - PROPERTIES LINK_FLAGS "-specs=${PSPSDK_PATH}/lib/prxspecs -Wl,-q,-T${PSPSDK_PATH}/lib/linkfile.prx ${PSPSDK_PATH}/lib/prxexports.o" - ) - add_custom_command( - TARGET ${nm} - POST_BUILD - COMMAND psp-fixup-imports ${PSP_EXECUTABLE_OUTPUT_NAME} - COMMAND mksfo '${PSP_EXECUTABLE_OUTPUT_NAME}' PARAM.SFO - COMMAND psp-prxgen ${PSP_EXECUTABLE_OUTPUT_NAME} ${PSP_EXECUTABLE_OUTPUT_NAME}.prx - COMMAND pack-pbp EBOOT.PBP PARAM.SFO NULL NULL NULL NULL NULL ${PSP_EXECUTABLE_OUTPUT_NAME}.prx NULL - ) -endfunction() - -set(PSP 1) diff --git a/demos/shooter/title.c b/demos/shooter/title.c index 89b57435c..1b457fd70 100644 --- a/demos/shooter/title.c +++ b/demos/shooter/title.c @@ -321,7 +321,7 @@ static int parse_source(AL_CONST char *filename, int attrib, void *param) textprintf_centre_ex(screen, font, SCREEN_W / 2, SCREEN_H / 2 + 8, makecol(160, 160, 160), 0, " %s ", - filename + (int)(unsigned long)param); + filename + (uintptr_t)param); while (pack_fgets(buf, sizeof(buf) - 1, f) != 0) { if (strstr(buf, "*/")) @@ -334,7 +334,7 @@ static int parse_source(AL_CONST char *filename, int attrib, void *param) for (d = c->files; d; d = d->next) { if (strcmp (d->text, - filename + (int)(unsigned long)param) == 0) + filename + (uintptr_t)param) == 0) break; } @@ -342,9 +342,9 @@ static int parse_source(AL_CONST char *filename, int attrib, void *param) d = malloc(sizeof(TEXT_LIST)); d->text = malloc(strlen - (filename + (int)(unsigned long)param) + + (filename + (uintptr_t)param) + 1); - strcpy(d->text, filename + (int)(unsigned long)param); + strcpy(d->text, filename + (uintptr_t)param); d->next = c->files; c->files = d; } @@ -531,7 +531,7 @@ static void load_credits(void) replace_filename(buf, buf2, "*.*", sizeof(buf)); for_each_file_ex(buf, 0, ~(FA_ARCH | FA_RDONLY | FA_DIREC), parse_source, - (void *)(unsigned long)(strlen(buf2) - 3)); + (void*)(strlen(buf2) - 3)); } /* sort the lists */ diff --git a/demos/skater/CMakeLists.txt b/demos/skater/CMakeLists.txt index bd6ef5690..b8bf451c8 100644 --- a/demos/skater/CMakeLists.txt +++ b/demos/skater/CMakeLists.txt @@ -47,7 +47,7 @@ if(SUPPORT_ALLEGROGL) PROPERTIES COMPILE_FLAGS -DDEMO_USE_ALLEGRO_GL ) - target_link_libraries(skater_agl allegrogl) + target_link_libraries(skater_agl allegrogl OpenGL::GL) endif(SUPPORT_ALLEGROGL) copy_files(copy_skater_data diff --git a/include/allegro/platform/aintpsp.h b/include/allegro/platform/aintpsp.h index ebc211f06..a9b1f0c1e 100644 --- a/include/allegro/platform/aintpsp.h +++ b/include/allegro/platform/aintpsp.h @@ -43,7 +43,7 @@ AL_VAR(GFX_VTABLE, psp_vtable8); AL_FUNC(void, psp_do_stretch_blit8, (BITMAP *source, BITMAP *dest, int source_x, int source_y, int source_width, int source_height, int dest_x, int dest_y, int dest_width, int dest_height, int masked)); /* The video bitmap actually displayed on the PSP. */ -BITMAP *displayed_video_bitmap; +AL_VAR(BITMAP *, displayed_video_bitmap); AL_FUNC(void, psp_draw_to_screen, (void)); diff --git a/include/allegro/platform/alpspcfg.h b/include/allegro/platform/alpspcfg.h index dd6327650..be7e64cd6 100644 --- a/include/allegro/platform/alpspcfg.h +++ b/include/allegro/platform/alpspcfg.h @@ -48,6 +48,7 @@ #define ALLEGRO_HAVE_STDINT_H 1 #define ALLEGRO_HAVE_SYS_TIME_H 1 #define ALLEGRO_HAVE_SYS_STAT_H 1 +#define ALLEGRO_NO_STRICMP /* Describe this platform */ #define ALLEGRO_PLATFORM_STR "PlayStation Portable" diff --git a/src/file.c b/src/file.c index f4c18d01a..8a634ff12 100644 --- a/src/file.c +++ b/src/file.c @@ -2078,7 +2078,7 @@ PACKFILE *pack_fopen_chunk(PACKFILE *f, int pack) return NULL; } _al_sane_strncpy(chunk->normal.passdata, f->normal.passdata, strlen(f->normal.passdata)+1); - chunk->normal.passpos = chunk->normal.passdata + (long)f->normal.passpos - (long)f->normal.passdata; + chunk->normal.passpos = chunk->normal.passdata + (f->normal.passpos - f->normal.passdata); f->normal.passpos = f->normal.passdata; } chunk->normal.flags |= PACKFILE_FLAG_OLD_CRYPT; @@ -2201,7 +2201,7 @@ PACKFILE *pack_fclose_chunk(PACKFILE *f) } if ((f->normal.passpos) && (f->normal.flags & PACKFILE_FLAG_OLD_CRYPT)) - parent->normal.passpos = parent->normal.passdata + (long)f->normal.passpos - (long)f->normal.passdata; + parent->normal.passpos = parent->normal.passdata + (f->normal.passpos - f->normal.passdata); free_packfile(f); } diff --git a/src/fsel.c b/src/fsel.c index 96fd796bc..269d6b733 100644 --- a/src/fsel.c +++ b/src/fsel.c @@ -933,7 +933,7 @@ int file_select_ex(AL_CONST char *message, char *path, AL_CONST char *ext, int s if (ugetc(get_filename(path))) { p = get_extension(path); if ((!ugetc(p)) && (ext) && (ugetc(ext)) && (!ustrpbrk(ext, uconvert_ascii(" ,;", tmp)))) { - size -= ((long)p - (long)path + ucwidth('.')); + size -= p - path + ucwidth('.'); if (size >= uwidth_max(U_CURRENT) + ucwidth(0)) { /* do not end with '.' */ p += usetc(p, '.'); ustrzcpy(p, size, ext); diff --git a/src/glyph.c b/src/glyph.c index b4ba535ce..30189ac5b 100644 --- a/src/glyph.c +++ b/src/glyph.c @@ -25,7 +25,7 @@ #define DRAW_GLYPH(bits, size) \ { \ AL_CONST unsigned char *data = glyph->dat; \ - unsigned long addr; \ + uintptr_t addr; \ int w = glyph->w; \ int h = glyph->h; \ int stride = (w+7)/8; \ diff --git a/src/gsprite.c b/src/gsprite.c index 1f0f606f3..951f934ec 100644 --- a/src/gsprite.c +++ b/src/gsprite.c @@ -139,7 +139,7 @@ void _soft_draw_gouraud_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y, int c1 addr = bmp_write_line(bmp, j) + x1*3; for (i=x1; iline[j-y] + (i-x)*3)); + pixel = bmp_read24((uintptr_t)(sprite->line[j-y] + (i-x)*3)); bmp_select(bmp); if (pixel != MASK_COLOR_24) { pixel = _blender_func24(pixel, _blender_col_24, fixtoi(hc)); diff --git a/src/gui.c b/src/gui.c index dfe96f616..9f37f57cb 100644 --- a/src/gui.c +++ b/src/gui.c @@ -571,7 +571,7 @@ static int obj_list_cmp(AL_CONST void *e1, AL_CONST void *e2) */ static int cmp_tab(AL_CONST DIALOG *d1, AL_CONST DIALOG *d2) { - int ret = (int)((AL_CONST unsigned long)d2 - (AL_CONST unsigned long)d1); + int ret = d2 - d1; /* Wrap around if d2 is before d1 in the dialog array. */ if (ret < 0) @@ -587,7 +587,7 @@ static int cmp_tab(AL_CONST DIALOG *d1, AL_CONST DIALOG *d2) */ static int cmp_shift_tab(AL_CONST DIALOG *d1, AL_CONST DIALOG *d2) { - int ret = (int)((AL_CONST unsigned long)d1 - (AL_CONST unsigned long)d2); + int ret = d1 - d2; /* Wrap around if d2 is after d1 in the dialog array. */ if (ret < 0) diff --git a/src/guiproc.c b/src/guiproc.c index edd284a83..7e06343bb 100644 --- a/src/guiproc.c +++ b/src/guiproc.c @@ -1365,17 +1365,17 @@ int d_text_list_proc(int msg, DIALOG *d, int c) thisitem = (*(getfuncptr)d->dp)(i, NULL); failure = FALSE; - if ((int)((unsigned long)d->dp3) < ustrlen(thisitem)) { - for (a=0; a < (int)((unsigned long)d->dp3); a++) { + if ((intptr_t)d->dp3 < ustrlen(thisitem)) { + for (a=0; a < (intptr_t)d->dp3; a++) { if (utolower(ugetat(thisitem, a)) != utolower(ugetat(selected, a))) { failure = TRUE; break; } } - if ((!failure) && (utolower(ugetat(thisitem, (int)(unsigned long)d->dp3)) == utolower(c))) { + if ((!failure) && (utolower(ugetat(thisitem, (uintptr_t)d->dp3)) == utolower(c))) { d->d1 = i; - d->dp3 = (void *)((unsigned long)d->dp3 + 1); + d->dp3 = (char *)d->dp3 + 1; if (sel) { for (i=0; ibpp = DEFAULT_COLOR_DEPTH; } +static void * psp_create_mutex(void) +{ + SceLwMutexWorkarea *mutex = (SceLwMutexWorkarea *)_AL_MALLOC(sizeof(SceLwMutexWorkarea)); + if (!mutex) + return NULL; + if (sceKernelCreateLwMutex(mutex, "allegro_mutex", 0, 0, NULL)) { + _AL_FREE(mutex); + return NULL; + } + return (void *)mutex; +} + +static void psp_destroy_mutex(void *handle) +{ + sceKernelDeleteLwMutex((SceLwMutexWorkarea *)handle); + _AL_FREE(handle); +} + +static void psp_lock_mutex(void *handle) +{ + sceKernelLockLwMutex((SceLwMutexWorkarea *)handle, 1, NULL); +} + +static void psp_unlock_mutex(void *handle) +{ + sceKernelUnlockLwMutex((SceLwMutexWorkarea *)handle, 1); +} diff --git a/src/unicode.c b/src/unicode.c index cd34afd71..1563aa8c8 100644 --- a/src/unicode.c +++ b/src/unicode.c @@ -737,7 +737,7 @@ int uoffset(AL_CONST char *s, int index) } } - return (long)s - (long)orig; + return s - orig; } @@ -1783,7 +1783,7 @@ int ustrsize(AL_CONST char *s) last = s; } while (ugetxc(&s) != 0); - return (long)last - (long)orig; + return last - orig; } @@ -1800,7 +1800,7 @@ int ustrsizez(AL_CONST char *s) do { } while (ugetxc(&s) != 0); - return (long)s - (long)orig; + return s - orig; } @@ -2313,7 +2313,7 @@ long ustrtol(AL_CONST char *s, char **endp, int base) ret = strtol(t, &myendp, base); if (endp) - *endp = (char *)s + uoffset(s, (long)myendp - (long)t); + *endp = (char *)s + uoffset(s, myendp - t); return ret; } @@ -2337,7 +2337,7 @@ double ustrtod(AL_CONST char *s, char **endp) ret = strtod(t, &myendp); if (endp) - *endp = (char *)s + uoffset(s, (long)myendp - (long)t); + *endp = (char *)s + uoffset(s, myendp - t); return ret; } @@ -2948,7 +2948,7 @@ static int decode_format_string(char *buf, STRING_ARG *string_arg, AL_CONST char case 'p': /* pointer */ - slen = sprint_hex(string_arg, &info, FALSE, (unsigned long)(va_arg(args, void *))); + slen = sprint_hex(string_arg, &info, FALSE, (unsigned LONGEST)va_arg(args, uintptr_t)); NEXT_C(); break; diff --git a/src/win/wddlock.c b/src/win/wddlock.c index 91219be96..f555c965e 100644 --- a/src/win/wddlock.c +++ b/src/win/wddlock.c @@ -165,7 +165,7 @@ void gfx_directx_lock(BITMAP *bmp) bmp->id |= BMP_ID_LOCKED; /* update the line array if our parent has moved */ - pitch = (long)parent->line[1] - (long)parent->line[0]; + pitch = parent->line[1] - parent->line[0]; data = parent->line[0] + (bmp->y_ofs - parent->y_ofs) * pitch + (bmp->x_ofs - parent->x_ofs) * BYTES_PER_PIXEL(bitmap_color_depth(bmp)); @@ -263,7 +263,7 @@ void gfx_directx_autolock(BITMAP *bmp) } /* update the line array if our parent has moved */ - pitch = (long)parent->line[1] - (long)parent->line[0]; + pitch = parent->line[1] - parent->line[0]; data = parent->line[0] + (bmp->y_ofs - parent->y_ofs) * pitch + (bmp->x_ofs - parent->x_ofs) * BYTES_PER_PIXEL(bitmap_color_depth(bmp)); diff --git a/src/win/wfile.c b/src/win/wfile.c index 56d46b3dd..028fdb3d4 100644 --- a/src/win/wfile.c +++ b/src/win/wfile.c @@ -120,7 +120,7 @@ struct FF_DATA struct _finddata_t a; struct _wfinddata_t w; } data; - long handle; + intptr_t handle; int attrib; }; diff --git a/src/win/wgdi.c b/src/win/wgdi.c index 5d173a689..247f7cbd3 100644 --- a/src/win/wgdi.c +++ b/src/win/wgdi.c @@ -524,7 +524,7 @@ static struct BITMAP *gfx_gdi_init(int w, int h, int v_w, int v_h, int color_dep /* create the screen surface */ screen_surf = _AL_MALLOC_ATOMIC(w * h * BYTES_PER_PIXEL(color_depth)); - gdi_screen = _make_bitmap(w, h, (unsigned long)screen_surf, &gfx_gdi, color_depth, w * BYTES_PER_PIXEL(color_depth)); + gdi_screen = _make_bitmap(w, h, (uintptr_t)screen_surf, &gfx_gdi, color_depth, w * BYTES_PER_PIXEL(color_depth)); if (!gdi_screen) { _TRACE(PREFIX_E "Could not make a bitmap out of the screen surface.\n"); goto Error; diff --git a/src/win/wmidi.c b/src/win/wmidi.c index 89b253c6f..d8ad9ca6f 100644 --- a/src/win/wmidi.c +++ b/src/win/wmidi.c @@ -242,8 +242,8 @@ int midi_win32_in_init(int input, int voices) id = (midi_input_driver->id & 0xFF) - 'A'; /* open midi input device */ - hr = midiInOpen(&midi_in_device, id, (DWORD)midi_in_proc, - (DWORD)NULL, CALLBACK_FUNCTION); + hr = midiInOpen(&midi_in_device, id, (DWORD_PTR)midi_in_proc, + (DWORD_PTR)NULL, CALLBACK_FUNCTION); if (hr != MMSYSERR_NOERROR) { _TRACE(PREFIX_E "midiInOpen failed (%x)\n", hr); midi_win32_in_exit(input); diff --git a/src/win/wsndwo.c b/src/win/wsndwo.c index 439eb6c09..6a4f77448 100644 --- a/src/win/wsndwo.c +++ b/src/win/wsndwo.c @@ -212,7 +212,7 @@ static void digi_waveout_mixer_callback(void) if (++digiwobufpos > (digiwobufdivs-1)) digiwobufpos = 0; - _mix_some_samples((unsigned long) (digiwobufdata+((digiwobufsize/digiwobufdivs)*digiwobufpos)), 0, TRUE); + _mix_some_samples((uintptr_t)digiwobufdata+((digiwobufsize/digiwobufdivs)*digiwobufpos), 0, TRUE); } } @@ -309,7 +309,7 @@ static int digi_waveout_init(int input, int voices) goto Error; } - _mix_some_samples((unsigned long) digiwobufdata, 0, TRUE); + _mix_some_samples((uintptr_t)digiwobufdata, 0, TRUE); /* get volume */ waveOutGetVolume(hWaveOut, &initial_volume); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 767c7c5c6..3deb5bb38 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -20,14 +20,7 @@ if(WIN32) add_our_executable(dibsound WIN32 win/dibsound.c win/dibsound.rc) add_our_executable(dxwindow WIN32 win/dxwindow.c win/dxwindow.rc) add_our_executable(scrsave WIN32 win/scrsave.c win/scrsave.rc) - # I don't know if there is a better way. - add_custom_command( - TARGET scrsave - POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E copy - "${CMAKE_CURRENT_BINARY_DIR}/scrsave.exe" - "${CMAKE_CURRENT_BINARY_DIR}/scrsave.scr" - ) + set_target_properties(scrsave PROPERTIES SUFFIX ".scr") endif() endif(WIN32) diff --git a/tests/win/dibgrab.c b/tests/win/dibgrab.c index c9f23020e..35b473eb0 100644 --- a/tests/win/dibgrab.c +++ b/tests/win/dibgrab.c @@ -36,7 +36,7 @@ PALETTE pal; -LRESULT CALLBACK WndProc(HWND hwnd, UINT message, UINT wParam, LONG lParam) +LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HWND dwnd; HDC hdc, ddc; diff --git a/tests/win/dibhello.c b/tests/win/dibhello.c index f6a5053a0..9d8d5c412 100644 --- a/tests/win/dibhello.c +++ b/tests/win/dibhello.c @@ -32,7 +32,7 @@ PALETTE pal; -LRESULT CALLBACK WndProc(HWND hwnd, UINT message, UINT wParam, LONG lParam) +LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { RECT rect, updaterect; PAINTSTRUCT ps; diff --git a/tests/win/dibsound.c b/tests/win/dibsound.c index 541efb64f..ec42308c7 100644 --- a/tests/win/dibsound.c +++ b/tests/win/dibsound.c @@ -19,6 +19,7 @@ */ #include "allegro.h" +#define STRICT #include "winalleg.h" #include "dibsound.rh" @@ -29,7 +30,7 @@ BITMAP *bmp = NULL; -BOOL CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) +INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { diff --git a/tests/win/dxwindow.c b/tests/win/dxwindow.c index 77ae03136..b7c469ff3 100644 --- a/tests/win/dxwindow.c +++ b/tests/win/dxwindow.c @@ -19,6 +19,7 @@ */ #include "allegro.h" +#define STRICT #include "winalleg.h" #include "dxwindow.rh" #include "examples/running.h" @@ -229,7 +230,7 @@ void boost(void) -BOOL CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) +INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { diff --git a/tests/win/scrsave.c b/tests/win/scrsave.c index 60eb1d9d3..ad9bbc3ed 100644 --- a/tests/win/scrsave.c +++ b/tests/win/scrsave.c @@ -32,6 +32,7 @@ #include +#define STRICT #include "allegro.h" #include "winalleg.h" #include "scrsave.rh" @@ -204,7 +205,7 @@ void ss_exit(void) /* dialog procedure for the settings dialog */ -BOOL CALLBACK settings_dlg_proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +INT_PTR CALLBACK settings_dlg_proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { @@ -290,7 +291,7 @@ int do_password(HANDLE hInstance, HANDLE hPrevInstance, HWND hParentWnd) /* window procedure for the screensaver preview */ -LRESULT CALLBACK preview_wnd_proc(HWND hwnd, UINT message, UINT wParam, LONG lParam) +LRESULT CALLBACK preview_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; @@ -464,7 +465,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdPa args++; if ((args[0]) && ((args[1] == ' ') || (args[1] == ':'))) - hwnd = (HWND)atoi(args+2); + hwnd = (HWND)(intptr_t)atoi(args+2); else hwnd = GetActiveWindow(); diff --git a/tools/grabber.c b/tools/grabber.c index 19ecc4ddc..40d5cfea1 100644 --- a/tools/grabber.c +++ b/tools/grabber.c @@ -1615,10 +1615,7 @@ static int folded_size = 0; /* helper function for comparing two pointers */ static INLINE int ptr_cmp(AL_CONST void *elem_p1, AL_CONST void *elem_p2) { - AL_CONST void *ptr1 = *(AL_CONST void **)elem_p1; - AL_CONST void *ptr2 = *(AL_CONST void **)elem_p2; - - return (int)((AL_CONST unsigned long)ptr2 - (AL_CONST unsigned long)ptr1); + return *(AL_CONST uintptr_t *)elem_p2 - *(AL_CONST uintptr_t *)elem_p1; } @@ -1642,7 +1639,7 @@ static void fold_datafile(DATAFILE *dat) break; } - memmove(elem_p + 1, elem_p, (size_t)((unsigned long)&folded[folded_size++] - (unsigned long)elem_p)); + memmove(elem_p + 1, elem_p, &folded[folded_size++] - elem_p); *elem_p = dat->dat; } @@ -1654,7 +1651,7 @@ static void unfold_datafile(DATAFILE *dat) void **elem_p = bsearch(&dat->dat, folded, folded_size, sizeof(void *), ptr_cmp); if (elem_p) - memmove(elem_p, elem_p + 1, (size_t)((unsigned long)&folded[--folded_size] - (unsigned long)elem_p)); + memmove(elem_p, elem_p + 1, &folded[--folded_size] - elem_p); } @@ -3037,7 +3034,7 @@ static int helper(void) while (uisspace(last[j])) j++; s++; - memmove(s, s+1+cr+j, size - ((long)s-(long)grabber_help_text) - 1 - j); + memmove(s, s+1+cr+j, size - (s-grabber_help_text) - 1 - j); size -= 1+cr+j; last = s; } @@ -3301,7 +3298,7 @@ static int add_new(int type) /* handle the new object command */ static int new_object(void) { - return add_new((int)((unsigned long)active_menu->dp)); + return add_new((intptr_t)active_menu->dp); } @@ -3309,7 +3306,7 @@ static int new_object(void) /* handle the replace object command */ static int replace_object(void) { - return replacer((int)((unsigned long)active_menu->dp)); + return replacer((intptr_t)active_menu->dp); } @@ -3908,7 +3905,7 @@ int main(int argc, char *argv[]) tmpmenu.proc = new_object; tmpmenu.child = NULL; tmpmenu.flags = 0; - tmpmenu.dp = (void *)(unsigned long)datedit_object_info[i]->type; + tmpmenu.dp = (void *)(intptr_t)datedit_object_info[i]->type; add_to_menu(new_menu, &tmpmenu, TRUE, NULL, NULL, 0); diff --git a/tools/plugins/datitype.c b/tools/plugins/datitype.c index de52f6541..00ca4829c 100644 --- a/tools/plugins/datitype.c +++ b/tools/plugins/datitype.c @@ -107,7 +107,7 @@ static int do_changetype(DATAFILE *dat, int *param, int type) /* changes the type of bitmap data */ static int changetype(void) { - int type = (int)((unsigned long)active_menu->dp); + int type = (intptr_t)active_menu->dp; char buf[80]; int ret, n; int p = 0; @@ -200,7 +200,7 @@ static int do_changedepth(DATAFILE *dat, int *param, int depth) /* changes the color depth of bitmap data */ static int changedepth(void) { - int depth = (int)((unsigned long)active_menu->dp); + int depth = (intptr_t)active_menu->dp; char buf[80]; int ret, n; int p = 0;