# PhysicsFS; a portable, flexible file i/o abstraction. # Copyright (C) 2007 Ryan C. Gordon. # # This file is modified for internal use. # # TODO: make it use a more recent zlib # # Please see the file LICENSE.txt in the source's root directory. CMAKE_MINIMUM_REQUIRED(VERSION 2.4) PROJECT(PhysicsFS) SET(PHYSFS_VERSION 2.0.3) # 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) INCLUDE(CheckIncludeFile) INCLUDE(CheckLibraryExists) INCLUDE(CheckCSourceCompiles) INCLUDE_DIRECTORIES(.) #INCLUDE_DIRECTORIES(platform) #INCLUDE_DIRECTORIES(archivers) 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) SET(OTHER_LDFLAGS ${OTHER_LDFLAGS} " -framework Carbon -framework IOKit") 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 OS2 AND NOT SOLARIS AND NOT WINDOWS) ADD_DEFINITIONS(-fvisibility=hidden) ENDIF(NOT OS2 AND NOT SOLARIS AND NOT WINDOWS) ENDIF(PHYSFS_IS_GCC4) ENDIF(CMAKE_COMPILER_IS_GNUCC) 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(ZLIB_SRCS zlib123/adler32.c zlib123/compress.c zlib123/crc32.c zlib123/deflate.c zlib123/gzio.c zlib123/infback.c zlib123/inffast.c zlib123/inflate.c zlib123/inftrees.c zlib123/trees.c zlib123/uncompr.c zlib123/zutil.c ) SET(LZMA_SRCS lzma/C/7zCrc.c lzma/C/Archive/7z/7zBuffer.c lzma/C/Archive/7z/7zDecode.c lzma/C/Archive/7z/7zExtract.c lzma/C/Archive/7z/7zHeader.c lzma/C/Archive/7z/7zIn.c lzma/C/Archive/7z/7zItem.c lzma/C/Archive/7z/7zMethodID.c lzma/C/Compress/Branch/BranchX86.c lzma/C/Compress/Branch/BranchX86_2.c 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 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) # 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 physfs.c physfs_byteorder.c physfs_unicode.c platform/os2.c platform/pocketpc.c platform/posix.c platform/unix.c platform/macosx.c platform/windows.c archivers/dir.c archivers/grp.c archivers/hog.c archivers/lzma.c archivers/mvl.c archivers/qpak.c archivers/wad.c archivers/zip.c ${PHYSFS_BEOS_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) # !!! FIXME # AC_DEFINE([PHYSFS_HAVE_LLSEEK], 1, [define if we have llseek]) 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) CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H) IF(HAVE_PTHREAD_H) SET(PHYSFS_HAVE_THREAD_SUPPORT TRUE) ENDIF(HAVE_PTHREAD_H) FIND_LIBRARY(PTHREAD_LIBRARY pthread) IF(PTHREAD_LIBRARY) SET(OPTIONAL_LIBRARY_LIBS ${OPTIONAL_LIBRARY_LIBS} ${PTHREAD_LIBRARY}) ENDIF(PTHREAD_LIBRARY) 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) CHECK_INCLUDE_FILE(assert.h HAVE_ASSERT_H) IF(HAVE_ASSERT_H) ADD_DEFINITIONS(-DHAVE_ASSERT_H=1) ENDIF(HAVE_ASSERT_H) # Archivers ... OPTION(PHYSFS_ARCHIVE_ZIP "Enable ZIP support" TRUE) IF(PHYSFS_ARCHIVE_ZIP) ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_ZIP=1) SET(PHYSFS_NEED_ZLIB TRUE) ENDIF(PHYSFS_ARCHIVE_ZIP) OPTION(PHYSFS_ARCHIVE_7Z "Enable 7zip support" TRUE) IF(PHYSFS_ARCHIVE_7Z) ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_7Z=1) # !!! FIXME: rename to 7z.c? SET(PHYSFS_SRCS ${PHYSFS_SRCS} ${LZMA_SRCS}) ENDIF(PHYSFS_ARCHIVE_7Z) OPTION(PHYSFS_ARCHIVE_GRP "Enable Build Engine GRP support" TRUE) IF(PHYSFS_ARCHIVE_GRP) ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_GRP=1) ENDIF(PHYSFS_ARCHIVE_GRP) OPTION(PHYSFS_ARCHIVE_WAD "Enable Doom WAD support" TRUE) IF(PHYSFS_ARCHIVE_WAD) ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_WAD=1) 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) 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) 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) ENDIF(PHYSFS_ARCHIVE_QPAK) INCLUDE_DIRECTORIES(zlib123) ADD_DEFINITIONS(-DZ_PREFIX=1) SET(PHYSFS_SRCS ${PHYSFS_SRCS} ${ZLIB_SRCS}) ADD_LIBRARY(physfs STATIC ${PHYSFS_SRCS}) SET_TARGET_PROPERTIES(physfs PROPERTIES OUTPUT_NAME "physfs") SET(PHYSFS_LIB_TARGET physfs) # end of CMakeLists.txt ...