diff --git a/cmake/i686-w64-mingw32.toolchain b/cmake/i686-w64-mingw32.toolchain new file mode 100644 index 0000000..3a49a5e --- /dev/null +++ b/cmake/i686-w64-mingw32.toolchain @@ -0,0 +1,11 @@ +set(CMAKE_SYSTEM_NAME Windows) + +set(CMAKE_C_COMPILER /usr/bin/i686-w64-mingw32-gcc) +set(CMAKE_CXX_COMPILER /usr/bin/i686-w64-mingw32-g++) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +set(MINGDIR /usr/i686-w64-mingw32) diff --git a/cmake/include.cmake b/cmake/include.cmake index 4885110..3f6cf27 100644 --- a/cmake/include.cmake +++ b/cmake/include.cmake @@ -1,3 +1,5 @@ +if (NOT LIBSUPERDERPY_CONFIG_INCLUDED) + add_definitions(-D_XOPEN_SOURCE=600) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c11") @@ -10,31 +12,42 @@ endif(APPLE) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/libsuperderpy/cmake ${PROJECT_SOURCE_DIR}/cmake) -include_directories("." "libsuperderpy/src") +include_directories("libsuperderpy/src") if(MINGW) # Guess MINGDIR from the value of CMAKE_C_COMPILER if it's not set. - if("$ENV{MINGDIR}" STREQUAL "") - string(REGEX REPLACE "/bin/[^/]*$" "" MINGDIR "${CMAKE_C_COMPILER}") - message(STATUS "Guessed MinGW directory: ${MINGDIR}") - else("$ENV{MINGDIR}" STREQUAL "") - file(TO_CMAKE_PATH "$ENV{MINGDIR}" MINGDIR) - message(STATUS "Using MINGDIR: ${MINGDIR}") - endif("$ENV{MINGDIR}" STREQUAL "") + if(NOT MINGDIR) + if("$ENV{MINGDIR}" STREQUAL "") + string(REGEX REPLACE "/bin/[^/]*$" "" MINGDIR "${CMAKE_C_COMPILER}") + message(STATUS "Guessed MinGW directory: ${MINGDIR}") + else("$ENV{MINGDIR}" STREQUAL "") + file(TO_CMAKE_PATH "$ENV{MINGDIR}" MINGDIR) + message(STATUS "Using MINGDIR: ${MINGDIR}") + endif("$ENV{MINGDIR}" STREQUAL "") + endif(NOT MINGDIR) # Search in MINGDIR for headers and libraries. set(CMAKE_PREFIX_PATH "${MINGDIR}") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mwindows") - endif(MINGW) set(CMAKE_INSTALL_RPATH "\$ORIGIN/../lib/${LIBSUPERDERPY_GAMENAME}:\$ORIGIN/gamestates:\$ORIGIN:\$ORIGIN/../lib:\$ORIGIN/lib:\$ORIGIN/bin") +find_package(Allegro5 REQUIRED) +find_package(Allegro5Font REQUIRED) +find_package(Allegro5TTF REQUIRED) +find_package(Allegro5Primitives REQUIRED) +find_package(Allegro5Audio REQUIRED) +find_package(Allegro5ACodec REQUIRED) +find_package(Allegro5Image REQUIRED) +find_package(Allegro5Color REQUIRED) +if(APPLE) + find_package(Allegro5Main) +endif(APPLE) MACRO(register_gamestate name) - add_library("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" SHARED "${name}.c") + add_library("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" MODULE "${name}.c") set_target_properties("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" PROPERTIES PREFIX "") @@ -50,8 +63,12 @@ ENDMACRO() MACRO(libsuperderpy_copy EXECUTABLE) - add_custom_command(TARGET "${EXECUTABLE}" PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "../libsuperderpy/src/libsuperderpy.so" $) + add_custom_command(TARGET "${EXECUTABLE}" PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "../libsuperderpy/src/libsuperderpy${CMAKE_SHARED_LIBRARY_SUFFIX}" $) ENDMACRO() include(InstallRequiredSystemLibraries) + +set(LIBSUPERDERPY_CONFIG_INCLUDED 1) + +endif (NOT LIBSUPERDERPY_CONFIG_INCLUDED) diff --git a/cmake/x86_64-w64-mingw32.toolchain b/cmake/x86_64-w64-mingw32.toolchain new file mode 100644 index 0000000..c10bfd9 --- /dev/null +++ b/cmake/x86_64-w64-mingw32.toolchain @@ -0,0 +1,11 @@ +set(CMAKE_SYSTEM_NAME Windows) + +set(CMAKE_C_COMPILER /usr/bin/x86_64-w64-mingw32-gcc) +set(CMAKE_CXX_COMPILER /usr/bin/x86_64-w64-mingw32-g++) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +set(MINGDIR /usr/x86_64-w64-mingw32) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c66f208..559019d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,25 +10,12 @@ add_definitions(-DLIBSUPERDERPY_GAMENAME_PRETTY="${LIBSUPERDERPY_GAMENAME_PRETTY add_definitions(-DLIBSUPERDERPY_GAMENAME="${LIBSUPERDERPY_GAMENAME}") add_definitions(-DLIBSUPERDERPY_INITIAL_GAMESTATE="${LIBSUPERDERPY_INITIAL_GAMESTATE}") -find_package(Allegro5 REQUIRED) -find_package(Allegro5Font REQUIRED) -find_package(Allegro5TTF REQUIRED) -find_package(Allegro5Primitives REQUIRED) -find_package(Allegro5Audio REQUIRED) -find_package(Allegro5ACodec REQUIRED) -find_package(Allegro5Image REQUIRED) -find_package(Allegro5Color REQUIRED) -if(APPLE) - find_package(Allegro5Main) -endif(APPLE) - - add_library("libsuperderpy" SHARED ${SRC_LIST}) SET_TARGET_PROPERTIES("libsuperderpy" PROPERTIES PREFIX "") include_directories(${ALLEGRO5_INCLUDE_DIR} ${ALLEGRO5_FONT_INCLUDE_DIR} ${ALLEGRO5_TTF_INCLUDE_DIR} ${ALLEGRO5_PRIMITIVES_INCLUDE_DIR} ${ALLEGRO5_AUDIO_INCLUDE_DIR} ${ALLEGRO5_ACODEC_INCLUDE_DIR} ${ALLEGRO5_IMAGE_INCLUDE_DIR}) -target_link_libraries("libsuperderpy" ${ALLEGRO5_LIBRARIES} ${ALLEGRO5_FONT_LIBRARIES} ${ALLEGRO5_TTF_LIBRARIES} ${ALLEGRO5_PRIMITIVES_LIBRARIES} ${ALLEGRO5_AUDIO_LIBRARIES} ${ALLEGRO5_ACODEC_LIBRARIES} ${ALLEGRO5_IMAGE_LIBRARIES} ${ALLEGRO5_MAIN_LIBRARIES} m dl) +target_link_libraries("libsuperderpy" ${ALLEGRO5_LIBRARIES} ${ALLEGRO5_FONT_LIBRARIES} ${ALLEGRO5_TTF_LIBRARIES} ${ALLEGRO5_PRIMITIVES_LIBRARIES} ${ALLEGRO5_AUDIO_LIBRARIES} ${ALLEGRO5_ACODEC_LIBRARIES} ${ALLEGRO5_IMAGE_LIBRARIES} m dl) install(TARGETS "libsuperderpy" DESTINATION ${LIB_INSTALL_DIR}) diff --git a/src/libsuperderpy.c b/src/libsuperderpy.c index 86af576..c1790ba 100644 --- a/src/libsuperderpy.c +++ b/src/libsuperderpy.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -39,8 +40,6 @@ #include "config.h" #include "libsuperderpy.h" -extern int main(int, char**); - void DrawGamestates(struct Game *game) { al_set_target_backbuffer(game->display); al_clear_to_color(al_map_rgb(0,0,0)); @@ -96,7 +95,7 @@ void ResumeGamestates(struct Game *game) { void derp(int sig) { - int __attribute__((unused)) n = write(STDERR_FILENO, "Segmentation fault\nI just don't know what went wrong!\n", 54); + ssize_t __attribute__((unused)) n = write(STDERR_FILENO, "Segmentation fault\nI just don't know what went wrong!\n", 54); abort(); } @@ -528,11 +527,7 @@ int libsuperderpy(int argc, char **argv){ al_shutdown_ttf_addon(); al_shutdown_font_addon(); if (game.restart) { -#ifdef ALLEGRO_MACOSX - return _al_mangled_main(argc, argv); -#else - return main(argc, argv); -#endif + return execv(argv[0], argv); // FIXME: on OSX there's chdir called which might break it } return 0; } diff --git a/src/utils.h b/src/utils.h index 0ce2b20..a372a05 100644 --- a/src/utils.h +++ b/src/utils.h @@ -28,7 +28,7 @@ #ifdef ALLEGRO_WINDOWS #define LIBRARY_EXTENSION ".dll" -#elseif ALLEGRO_MACOSX +#elif ALLEGRO_MACOSX #define LIBRARY_EXTENTION ".dylib" #else #define LIBRARY_EXTENSION ".so"