# HG changeset patch # User koda # Date 1361743860 -3600 # Node ID d610e692e2f6b5b6580cab9da3e5c7c6982f1771 # Parent dc511bf91aa0e5407e497f56f2041c6bd5585cbd perform a version check before including physfs (maybe there is a better place for this?) and allow overriding automagic search diff -r dc511bf91aa0 -r d610e692e2f6 CMakeLists.txt --- a/CMakeLists.txt Sun Feb 24 19:24:14 2013 +0100 +++ b/CMakeLists.txt Sun Feb 24 23:11:00 2013 +0100 @@ -267,14 +267,36 @@ endif() -#physfs library and its layer -if(NOT DEFINED PHYSFS_BUNDLE) +#physfs discovery +set(PHYSFS_FOUND false) +if (NOT PHYSFS_LIBRARY OR NOT PHYSFS_INCLUDE_DIR) find_package(PhysFS) endif() -if(NOT PHYSFS_FOUND) + +#if they bundled one is discovered +set(physfs_output_name "hw_physfs") +get_filename_component(physfs_detected_name ${PHYSFS_LIBRARY} NAME_WE) +#or if the found one is too old +find_file(physfs_h physfs.h ${PHYSFS_INCLUDE_DIR}) +if(physfs_h) + file(STRINGS ${physfs_h} physfs_majorversion REGEX "PHYSFS_VER_MAJOR[\t' ']+[0-9]+") + file(STRINGS ${physfs_h} physfs_minorversion REGEX "PHYSFS_VER_MINOR[\t' ']+[0-9]+") + file(STRINGS ${physfs_h} physfs_patchversion REGEX "PHYSFS_VER_PATCH[\t' ']+[0-9]+") + string(REGEX MATCH "([0-9]+)" physfs_majorversion "${physfs_majorversion}") + string(REGEX MATCH "([0-9]+)" physfs_minorversion "${physfs_minorversion}") + string(REGEX MATCH "([0-9]+)" physfs_patchversion "${physfs_patchversion}") + set(physfs_detected_ver "${physfs_majorversion}.${physfs_minorversion}.${physfs_patchversion}") + if(physfs_detected_ver VERSION_LESS "2.1.0") + message(STATUS "PhysFS version is too old (dected ${physfs_detected_ver}, required 2.1.0)") + set(physfs_too_old true) + endif() +endif() + +if(NOT ${PHYSFS_FOUND} OR physfs_too_old OR + (${physfs_detected_name} MATCHES ${physfs_output_name})) message(STATUS "PhysFS will be provided by the bundled sources") - set(physfs_output_name "hw_physfs") add_subdirectory(misc/libphysfs) + #-XLA is a 'beta' fpc flag that will rename libraries before passing them to the linker list(APPEND pascal_flags "-XLAphysfs=${physfs_output_name}") endif() add_subdirectory(misc/libphyslayer) diff -r dc511bf91aa0 -r d610e692e2f6 misc/libphysfs/CMakeLists.txt --- a/misc/libphysfs/CMakeLists.txt Sun Feb 24 19:24:14 2013 +0100 +++ b/misc/libphysfs/CMakeLists.txt Sun Feb 24 23:11:00 2013 +0100 @@ -282,9 +282,6 @@ set(PHYSFS_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/misc/libphysfs/ CACHE STRING "" FORCE) set(PHYSFS_LIBRARY ${LIBRARY_OUTPUT_PATH}/${lib_prefix}${physfs_output_name}${lib_suffix} CACHE STRING "" FORCE) -## this is to avoid find_package() find the just built library and shadowing it at next cmake run -set(PHYSFS_BUNDLE TRUE CACHE STRING "" FORCE) - ## removed install, language bindings and test program ## simplified configuration output