diff -r 1dedcc37bfe8 -r 1853628ae285 misc/libphysfs/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/misc/libphysfs/CMakeLists.txt Fri Feb 22 05:15:48 2013 +0100 @@ -0,0 +1,315 @@ +# PhysicsFS; a portable, flexible file i/o abstraction. +# Copyright (C) 2007 Ryan C. Gordon. +# +# Please see the file LICENSE.txt in the source's root directory. + +## lines starting with '##' are lines overridden/modified/added by Hedgewars configuration +##CMAKE_MINIMUM_REQUIRED(VERSION 2.4) +##PROJECT(PhysicsFS) +set(PHYSFS_VERSION 2.1.0) + +# Increment this if/when we break backwards compatibility. +set(PHYSFS_SOVERSION 1) + +# I hate that they define "WIN32" ... we're about to move to Win64...I hope! +if(WIN32 AND NOT WINDOWS) + set(WINDOWS TRUE) +endif(WIN32 AND NOT WINDOWS) + +# Bleh, let's do it for "APPLE" too. +if(APPLE AND NOT MACOSX) + set(MACOSX TRUE) +endif(APPLE AND NOT MACOSX) + +# For now, Haiku and BeOS are the same, as far as the build system cares. +if(HAIKU AND NOT BEOS) + set(BEOS TRUE) +endif(HAIKU AND NOT BEOS) + +if(CMAKE_SYSTEM_NAME STREQUAL "SunOS") + set(SOLARIS TRUE) +endif(CMAKE_SYSTEM_NAME STREQUAL "SunOS") + +include(CheckIncludeFile) +include(CheckLibraryExists) +include(CheckCSourceCompiles) + +## SDL is needed by extra +find_package(SDL REQUIRED) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) ## +include_directories(${SDL_INCLUDE_DIR}) ## +include_directories(${LUA_INCLUDE_DIR}) ## + +if(MACOSX) + # Fallback to older OS X on PowerPC to support wider range of systems... + if(CMAKE_OSX_ARCHITECTURES MATCHES ppc) + add_definitions(-DMAC_OS_X_VERSION_MIN_REQUIRED=1020) + set(OTHER_LDFLAGS ${OTHER_LDFLAGS} " -mmacosx-version-min=10.2") + endif(CMAKE_OSX_ARCHITECTURES MATCHES ppc) + + # Need these everywhere... + add_definitions(-fno-common) + find_library(iokit_framework NAMES IOKit) + list(APPEND OTHER_LDFLAGS ${iokit_framework}) +endif(MACOSX) + +# Add some gcc-specific command lines. +if(CMAKE_COMPILER_IS_GNUCC) + # Always build with debug symbols...you can strip it later. + add_definitions(-g -pipe -Werror -fsigned-char) + + # Stupid BeOS generates warnings in the system headers. + if(NOT BEOS) + add_definitions(-Wall) + endif(NOT BEOS) + + CHECK_C_SOURCE_COMPILES(" + #if ((defined(__GNUC__)) && (__GNUC__ >= 4)) + int main(int argc, char **argv) { int is_gcc4 = 1; return 0; } + #else + #error This is not gcc4. + #endif + " PHYSFS_IS_GCC4) + + if(PHYSFS_IS_GCC4) + # Not supported on several operating systems at this time. + if(NOT SOLARIS AND NOT WINDOWS) + add_definitions(-fvisibility=hidden) + endif(NOT SOLARIS AND NOT WINDOWS) + endif(PHYSFS_IS_GCC4) + + # Don't use -rpath. + set(CMAKE_SKIP_RPATH ON CACHE BOOL "Skip RPATH" FORCE) +endif(CMAKE_COMPILER_IS_GNUCC) + +if(CMAKE_C_COMPILER_ID STREQUAL "SunPro") + add_definitions(-erroff=E_EMPTY_TRANSLATION_UNIT) + add_definitions(-xldscope=hidden) +endif(CMAKE_C_COMPILER_ID STREQUAL "SunPro") + +if(MSVC) + # VS.NET 8.0 got really really anal about strcpy, etc, which even if we + # cleaned up our code, zlib, etc still use...so disable the warning. + add_definitions(-D_CRT_SECURE_NO_WARNINGS=1) +endif(MSVC) + + +# Basic chunks of source code ... +set(LZMA_SRCS + src/lzma/C/7zCrc.c + src/lzma/C/Archive/7z/7zBuffer.c + src/lzma/C/Archive/7z/7zDecode.c + src/lzma/C/Archive/7z/7zExtract.c + src/lzma/C/Archive/7z/7zHeader.c + src/lzma/C/Archive/7z/7zIn.c + src/lzma/C/Archive/7z/7zItem.c + src/lzma/C/Archive/7z/7zMethodID.c + src/lzma/C/Compress/Branch/BranchX86.c + src/lzma/C/Compress/Branch/BranchX86_2.c + src/lzma/C/Compress/Lzma/LzmaDecode.c +) + +if(BEOS) + # We add this explicitly, since we don't want CMake to think this + # is a C++ project unless we're on BeOS. + set(PHYSFS_BEOS_SRCS src/platform_beos.cpp) + find_library(BE_LIBRARY be) + find_library(ROOT_LIBRARY root) + set(optionAL_LIBRARY_LIBS ${optionAL_LIBRARY_LIBS} ${BE_LIBRARY} ${ROOT_LIBRARY}) +endif(BEOS) + +## extra functions needed by Hedgewars +## TODO: maybe it's better to have them in a separate library? +set(PHYSFS_HEDGE_SRCS + extras/physfsrwops.c + extras/physfslualoader.c + extras/hwpacksmounter.c +) + +# Almost everything is "compiled" here, but things that don't apply to the +# build are #ifdef'd out. This is to make it easy to embed PhysicsFS into +# another project or bring up a new build system: just compile all the source +# code and #define the things you want. +set(PHYSFS_SRCS + src/physfs.c + src/physfs_byteorder.c + src/physfs_unicode.c + src/platform_posix.c + src/platform_unix.c + src/platform_macosx.c + src/platform_windows.c + src/archiver_dir.c + src/archiver_unpacked.c + src/archiver_grp.c + src/archiver_hog.c + src/archiver_lzma.c + src/archiver_mvl.c + src/archiver_qpak.c + src/archiver_wad.c + src/archiver_zip.c + src/archiver_iso9660.c + ${PHYSFS_BEOS_SRCS} + ${PHYSFS_HEDGE_SRCS} ## +) + + +# platform layers ... + +if(UNIX) + if(BEOS) + set(PHYSFS_HAVE_CDROM_SUPPORT TRUE) + set(PHYSFS_HAVE_THREAD_SUPPORT TRUE) + set(HAVE_PTHREAD_H TRUE) + else(BEOS) + CHECK_INCLUDE_FILE(sys/ucred.h HAVE_UCRED_H) + if(HAVE_UCRED_H) + add_definitions(-DPHYSFS_HAVE_SYS_UCRED_H=1) + set(PHYSFS_HAVE_CDROM_SUPPORT TRUE) + endif(HAVE_UCRED_H) + + CHECK_INCLUDE_FILE(mntent.h HAVE_MNTENT_H) + if(HAVE_MNTENT_H) + add_definitions(-DPHYSFS_HAVE_MNTENT_H=1) + set(PHYSFS_HAVE_CDROM_SUPPORT TRUE) + endif(HAVE_MNTENT_H) + + # !!! FIXME: Solaris fails this, because mnttab.h implicitly + # !!! FIXME: depends on other system headers. :( + #CHECK_INCLUDE_FILE(sys/mnttab.h HAVE_SYS_MNTTAB_H) + CHECK_C_SOURCE_COMPILES(" + #include + #include + int main(int argc, char **argv) { return 0; } + " HAVE_SYS_MNTTAB_H) + + if(HAVE_SYS_MNTTAB_H) + add_definitions(-DPHYSFS_HAVE_SYS_MNTTAB_H=1) + set(PHYSFS_HAVE_CDROM_SUPPORT TRUE) + endif(HAVE_SYS_MNTTAB_H) + + CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H) + if(HAVE_PTHREAD_H) + set(PHYSFS_HAVE_THREAD_SUPPORT TRUE) + endif(HAVE_PTHREAD_H) + endif(BEOS) +endif(UNIX) + +if(WINDOWS) + set(PHYSFS_HAVE_CDROM_SUPPORT TRUE) + set(PHYSFS_HAVE_THREAD_SUPPORT TRUE) +endif(WINDOWS) + +if(NOT PHYSFS_HAVE_CDROM_SUPPORT) + add_definitions(-DPHYSFS_NO_CDROM_SUPPORT=1) + message(WARNING " ***") + message(WARNING " *** There is no CD-ROM support in this build!") + message(WARNING " *** PhysicsFS will just pretend there are no discs.") + message(WARNING " *** This may be fine, depending on how PhysicsFS is used,") + message(WARNING " *** but is this what you REALLY wanted?") + message(WARNING " *** (Maybe fix CMakeLists.txt, or write a platform driver?)") + message(WARNING " ***") +endif(NOT PHYSFS_HAVE_CDROM_SUPPORT) + +if(PHYSFS_HAVE_THREAD_SUPPORT) + add_definitions(-D_REENTRANT -D_THREAD_SAFE) +else(PHYSFS_HAVE_THREAD_SUPPORT) + add_definitions(-DPHYSFS_NO_THREAD_SUPPORT=1) + message(WARNING " ***") + message(WARNING " *** There is no thread support in this build!") + message(WARNING " *** PhysicsFS will NOT be reentrant!") + message(WARNING " *** This may be fine, depending on how PhysicsFS is used,") + message(WARNING " *** but is this what you REALLY wanted?") + message(WARNING " *** (Maybe fix CMakeLists.txt, or write a platform driver?)") + message(WARNING " ***") +endif(PHYSFS_HAVE_THREAD_SUPPORT) + + +# Archivers ... + +option(PHYSFS_ARCHIVE_ZIP "Enable ZIP support" TRUE) +if(PHYSFS_ARCHIVE_ZIP) + add_definitions(-DPHYSFS_SUPPORTS_ZIP=1) + set(PHYSFS_FEATURES "ZIP") +endif(PHYSFS_ARCHIVE_ZIP) + +option(PHYSFS_ARCHIVE_7Z "Enable 7zip support" FALSE) +if(PHYSFS_ARCHIVE_7Z) + add_definitions(-DPHYSFS_SUPPORTS_7Z=1) + list(APPEND PHYSFS_SRCS ${LZMA_SRCS}) + set(PHYSFS_FEATURES "${PHYSFS_FEATURES} 7zip") +endif(PHYSFS_ARCHIVE_7Z) + +option(PHYSFS_ARCHIVE_GRP "Enable Build Engine GRP support" TRUE) +if(PHYSFS_ARCHIVE_GRP) + add_definitions(-DPHYSFS_SUPPORTS_GRP=1) + set(PHYSFS_FEATURES "${PHYSFS_FEATURES} GRP") +endif(PHYSFS_ARCHIVE_GRP) + +option(PHYSFS_ARCHIVE_WAD "Enable Doom WAD support" TRUE) +if(PHYSFS_ARCHIVE_WAD) + add_definitions(-DPHYSFS_SUPPORTS_WAD=1) + set(PHYSFS_FEATURES "${PHYSFS_FEATURES} WAD") +endif(PHYSFS_ARCHIVE_WAD) + +option(PHYSFS_ARCHIVE_HOG "Enable Descent I/II HOG support" TRUE) +if(PHYSFS_ARCHIVE_HOG) + add_definitions(-DPHYSFS_SUPPORTS_HOG=1) + set(PHYSFS_FEATURES "${PHYSFS_FEATURES} HOG") +endif(PHYSFS_ARCHIVE_HOG) + +option(PHYSFS_ARCHIVE_MVL "Enable Descent I/II MVL support" TRUE) +if(PHYSFS_ARCHIVE_MVL) + add_definitions(-DPHYSFS_SUPPORTS_MVL=1) + set(PHYSFS_FEATURES "${PHYSFS_FEATURES} MVL") +endif(PHYSFS_ARCHIVE_MVL) + +option(PHYSFS_ARCHIVE_QPAK "Enable Quake I/II QPAK support" TRUE) +if(PHYSFS_ARCHIVE_QPAK) + add_definitions(-DPHYSFS_SUPPORTS_QPAK=1) + set(PHYSFS_FEATURES "${PHYSFS_FEATURES} QPAK") +endif(PHYSFS_ARCHIVE_QPAK) + +option(PHYSFS_ARCHIVE_ISO9660 "Enable ISO9660 support" TRUE) +if(PHYSFS_ARCHIVE_ISO9660) + add_definitions(-DPHYSFS_SUPPORTS_ISO9660=1) + set(PHYSFS_FEATURES "${PHYSFS_FEATURES} CD-ROM") +endif(PHYSFS_ARCHIVE_ISO9660) + +##as needed by Hedgewars configuration +if(WINDOWS) + option(PHYSFS_BUILD_STATIC "Build static library" FALSE) + option(PHYSFS_BUILD_SHARED "Build shared library" TRUE) + list(APPEND OTHER_LDFLAGS ${SDL_LIBRARY}) +else(WINDOWS) + option(PHYSFS_BUILD_STATIC "Build static library" TRUE) + option(PHYSFS_BUILD_SHARED "Build shared library" FALSE) +endif(WINDOWS) + +if(PHYSFS_BUILD_STATIC) + add_library(physfs STATIC ${PHYSFS_SRCS}) + set_target_properties(physfs PROPERTIES OUTPUT_NAME "physfs") +endif(PHYSFS_BUILD_STATIC) + +if(PHYSFS_BUILD_SHARED) + add_library(physfs SHARED ${PHYSFS_SRCS}) + set_target_properties(physfs PROPERTIES VERSION ${PHYSFS_VERSION}) + set_target_properties(physfs PROPERTIES SOVERSION ${PHYSFS_SOVERSION}) + target_link_libraries(physfs ${optionAL_LIBRARY_LIBS} ${OTHER_LDFLAGS}) + install(TARGETS physfs RUNTIME DESTINATION ${target_library_install_dir}) ## +endif(PHYSFS_BUILD_SHARED) + +if(NOT PHYSFS_BUILD_SHARED AND NOT PHYSFS_BUILD_STATIC) + message(FATAL "Both shared and static libraries are disabled!") +endif(NOT PHYSFS_BUILD_SHARED AND NOT PHYSFS_BUILD_STATIC) + +# CMake FAQ says I need this... +if(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC) + set_target_properties(physfs PROPERTIES CLEAN_DIRECT_OUTPUT 1) +endif(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC) + + +## removed install, language bindings and test program +## simplified configuration output + +message(STATUS "PhysicsFS will build with ${PHYSFS_FEATURES} support") +