diff -r 31570b766315 -r ed5a6478e710 hedgewars/CMakeLists.txt --- a/hedgewars/CMakeLists.txt Tue Nov 10 18:16:35 2015 +0100 +++ b/hedgewars/CMakeLists.txt Tue Nov 10 20:43:13 2015 +0100 @@ -6,7 +6,33 @@ find_package(SDL2_ttf REQUIRED) find_package(SDL2_mixer REQUIRED) -include (CheckLibraryExists) +include(CheckLibraryExists) +include(${CMAKE_MODULE_PATH}/utils.cmake) + + +enable_language(Pascal) +add_flag_append(CMAKE_Pascal_FLAGS "-Cs2000000") +add_flag_append(CMAKE_Pascal_FLAGS_DEBUG "-gv") +add_flag_append(CMAKE_Pascal_FLAGS_RELEASE "-Xs") +if(UNIX) + include(TargetArch) + target_architecture(CMAKE_TARGET_ARCHITECTURES) + if(${CMAKE_Pascal_COMPILER_VERSION} VERSION_GREATER 2.7 OR ${CMAKE_TARGET_ARCHITECTURES} MATCHES "x86_64" OR ${CMAKE_TARGET_ARCHITECTURES} MATCHES "i386") + add_flag_append(CMAKE_Pascal_FLAGS "-fPIC") + endif() +endif(UNIX) + +# convert list into pascal array +if(FONTS_DIRS) + list(LENGTH FONTS_DIRS ndirs) + set(FONTS_DIRS_ARRAY "array [0..${ndirs}] of PChar = (") + foreach(fontdir ${FONTS_DIRS}) + set(FONTS_DIRS_ARRAY "${FONTS_DIRS_ARRAY}\n_P'${fontdir}',") + endforeach(fontdir) + set(FONTS_DIRS_ARRAY "${FONTS_DIRS_ARRAY}\nnil);\n") +else(FONTS_DIRS) + set(FONTS_DIRS_ARRAY "array [0..1] of PChar = (nil, nil);") +endif(FONTS_DIRS) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.inc.in ${CMAKE_CURRENT_BINARY_DIR}/config.inc) include_directories(${CMAKE_CURRENT_BINARY_DIR}) @@ -49,6 +75,9 @@ uLandPainted.pas uLandOutline.pas uLandGenMaze.pas + uLandGenPerlin.pas + uLandGenTemplateBased.pas + uLandUtils.pas #this is where dependency tracking becomes hard uStore.pas @@ -79,31 +108,45 @@ #these interact with everything, so compile last uScript.pas - hwengine.pas - - #we also have uTouch.pas - options.inc - ${CMAKE_CURRENT_BINARY_DIR}/config.inc ) -include(${CMAKE_MODULE_PATH}/utils.cmake) - -if (${CMAKE_Pascal_COMPILER_VERSION} VERSION_LESS 2.2 OR # older versions are just ancient - (${CMAKE_Pascal_COMPILER_VERSION} VERSION_LESS 2.6 AND APPLE)) # because of 64bit and opengl bindings +if(${CMAKE_Pascal_COMPILER_VERSION} VERSION_LESS 2.2 OR # older versions are just ancient + (${CMAKE_Pascal_COMPILER_VERSION} VERSION_LESS 2.6 AND APPLE)) # because of 64bit and opengl bindings message(FATAL_ERROR "Your FreePascal installation is too old (fpc ${CMAKE_Pascal_COMPILER_VERSION})!") -elseif(CMAKE_Pascal_COMPILER_VERSION VERSION_GREATER 2.4) +elseif(${CMAKE_Pascal_COMPILER_VERSION} VERSION_GREATER 2.4) #enable INLINE only with a recent version of fpc add_flag_prepend(CMAKE_Pascal_FLAGS_RELEASE -Si) endif() +#generic folder where our libraries reside +add_flag_append(CMAKE_Pascal_FLAGS "-Fl${LIBRARY_OUTPUT_PATH}") -if(FFMPEG_FOUND) +#DEPENDECIES AND EXECUTABLES SECTION +if(APPLE AND (NOT BUILD_ENGINE_LIBRARY)) + #on OSX we need to provide the SDL_main() function when building as + #executable and the entry point too + add_subdirectory(sdlmain) + list(APPEND HW_LINK_LIBS SDLmain) + add_flag_append(CMAKE_Pascal_FLAGS "-k-lsdlmain") + add_flag_append(CMAKE_Pascal_FLAGS "-XMSDL_main") + #OpenGL deps + add_flag_append(CMAKE_Pascal_FLAGS "-k-framework -kCocoa") + add_flag_append(CMAKE_Pascal_FLAGS "-k-framework -kOpenGL") + + #set the correct library or framework style depending on the main SDL + string(FIND "${SDL_LIBRARY}" "dylib" sdl_framework) + if(${sdl_framework} GREATER -1) + add_flag_append(CMAKE_Pascal_FLAGS "-k-lsdl -k-lsdl_image -k-lsdl_mixer -k-lsdl_ttf -k-lsdl_net") + else() + add_flag_append(CMAKE_Pascal_FLAGS "-k-framework -kSDL -k-framework -kSDL_image -k-framework -kSDL_mixer -k-framework -kSDL_net -k-framework -kSDL_net -k-framework -kSDL_ttf") + endif() +endif() + +if(LIBAV_FOUND) add_subdirectory(avwrapper) list(APPEND HW_LINK_LIBS avwrapper) add_definitions(-dUSE_VIDEO_RECORDING) - add_flag_append(CMAKE_Pascal_FLAGS -Fl${LIBRARY_OUTPUT_PATH}) - endif() find_package_or_disable_msg(PNG NOPNG "Screenshots will be saved in BMP") @@ -111,11 +154,11 @@ list(INSERT engine_sources 0 PNGh.pas) list(REMOVE_AT PNG_LIBRARIES 1) #removing the zlib library path get_filename_component(PNG_LIBRARY_DIR ${PNG_LIBRARIES} PATH) - add_flag_append(CMAKE_Pascal_FLAGS -Fl${PNG_LIBRARY_DIR}) + add_flag_append(CMAKE_Pascal_FLAGS "-k-L${PNG_LIBRARY_DIR} -Fl${PNG_LIBRARY_DIR}") add_definitions(-dPNG_SCREENSHOTS) endif() -if(LUA_FOUND AND LUA_SYSTEM) +if(LUA_SYSTEM) get_filename_component(LUA_LIBRARY_DIR ${LUA_LIBRARY} PATH) get_filename_component(LUA_LIBRARY_NAME ${LUA_LIBRARY} NAME) #NAME_WE would strip the .1 (or .2) next to the ".so" @@ -127,27 +170,44 @@ add_flag_append(CMAKE_Pascal_FLAGS "-XLAlua=${lua_output_name}") endif() - -if(NOT PHYSFS_FOUND) +if(PHYSFS_SYSTEM) + get_filename_component(PHYSFS_LIBRARY_DIR ${PHYSFS_LIBRARY} PATH) + add_flag_append(CMAKE_Pascal_FLAGS "-Fl${PHYSFS_LIBRARY}") +else() add_definitions(-dPHYSFS_INTERNAL) list(APPEND HW_LINK_LIBS physfs) #-XLA is a beta fpc flag that renames libraries before passing them to the linker #we also have to pass PHYSFS_INTERNAL to satisfy windows runtime requirements #(should be harmless on other platforms) - add_flag_append(CMAKE_Pascal_FLAGS "-Fl${LIBRARY_OUTPUT_PATH} -XLAphysfs=${physfs_output_name}") + add_flag_append(CMAKE_Pascal_FLAGS "-XLAphysfs=${physfs_output_name}") endif() list(APPEND HW_LINK_LIBS physlayer) + #Mix_Init/Mix_Quit from SDL_mixer 1.2.10 +check_library_exists(${SDL2MIXER_LIBRARY} Mix_Init "" HAVE_MIXINIT) +if(HAVE_MIXINIT) + add_definitions(-dSDL_MIXER_NEWER) +endif(HAVE_MIXINIT) + +#IMG_Init/IMG_Quit from SDL_image 1.2.8 +check_library_exists(${SDL2IMAGE_LIBRARY} IMG_Init "" HAVE_IMGINIT) +if(HAVE_IMGINIT) + add_definitions(-dSDL_IMAGE_NEWER) +endif(HAVE_IMGINIT) + +#opengl 2 +IF(GL2) + add_definitions(-dGL2) +ENDIF(GL2) #needs to be last add_definitions(-dDEBUGFILE) -# make source files objects depend on their predecessors in list +# source files are with full path after this set(sourcefiles_sofar "${CMAKE_CURRENT_SOURCE_DIR}/options.inc" "${CMAKE_CURRENT_BINARY_DIR}/config.inc") foreach(loop_var ${engine_sources}) - SET_SOURCE_FILES_PROPERTIES(${loop_var} PROPERTIES OBJECT_DEPENDS "${sourcefiles_sofar}") list(APPEND sourcefiles_sofar "${CMAKE_CURRENT_SOURCE_DIR}/${loop_var}") endforeach(loop_var) @@ -155,9 +215,11 @@ #SOURCE AND PROGRAMS SECTION if(BUILD_ENGINE_LIBRARY) message("***Engine will be built as library (experimental)***") - if(APPLE AND current_macosx_version VERSION_GREATER "10.5") - # due to compiler/linker issues on Max OS X 10.6 -k-no_order_inits is needed to avoid linking fail - add_flag_prepend(CMAKE_Pascal_FLAGS "-k-no_order_inits") + if(APPLE) + if (${current_macosx_version} VERSION_GREATER "10.5") + # due to compiler/linker issues on Max OS X 10.6 -k-no_order_inits is needed to avoid linking fail + add_flag_prepend(CMAKE_Pascal_FLAGS "-k-no_order_inits") + endif() endif() #workaround for missing support during object generation @@ -166,12 +228,14 @@ add_flag_prepend(CMAKE_Pascal_FLAGS "-o${LIBRARY_OUTPUT_PATH}/${engine_output_name}") add_definitions(-dHWLIBRARY) - add_library(hwengine SHARED ${engine_sources} hwLibrary.pas) + set_source_files_properties(hwLibrary.pas PROPERTIES OBJECT_DEPENDS "${sourcefiles_sofar};${CMAKE_CURRENT_SOURCE_DIR}/hwengine.pas") + add_library(hwengine SHARED hwLibrary.pas) else() # no need to change name here because target has same name set(engine_output_name "hwengine${CMAKE_EXECUTABLE_SUFFIX}") set(destination_dir ${target_binary_install_dir}) - add_executable(hwengine ${engine_sources}) + set_source_files_properties(hwengine.pas PROPERTIES OBJECT_DEPENDS "${sourcefiles_sofar}") + add_executable(hwengine hwengine.pas) endif() #even though not actually used, this will trigger relink if any lib changes