misc/physfs/CMakeLists.txt
branchflibqtfrontend
changeset 8304 620560c89284
parent 8208 171da01bd04d
parent 8288 fd6743995dfc
child 8363 0b4ac686fc44
equal deleted inserted replaced
8282:1f81bcce3ee6 8304:620560c89284
     4 # Please see the file LICENSE.txt in the source's root directory.
     4 # Please see the file LICENSE.txt in the source's root directory.
     5 
     5 
     6 #lines overridden by Hedgewars configuration
     6 #lines overridden by Hedgewars configuration
     7 #CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
     7 #CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
     8 #PROJECT(PhysicsFS)
     8 #PROJECT(PhysicsFS)
     9 set(PHYSFS_VERSION 2.1.0)
     9 SET(PHYSFS_VERSION 2.1.0)
    10 
    10 
    11 # Increment this if/when we break backwards compatibility.
    11 # Increment this if/when we break backwards compatibility.
    12 set(PHYSFS_SOVERSION 1)
    12 SET(PHYSFS_SOVERSION 1)
    13 
    13 
    14 # I hate that they define "WIN32" ... we're about to move to Win64...I hope!
    14 # I hate that they define "WIN32" ... we're about to move to Win64...I hope!
    15 if(WIN32 AND NOT WINDOWS)
    15 IF(WIN32 AND NOT WINDOWS)
    16     set(WINDOWS true)
    16     SET(WINDOWS TRUE)
    17 endif(WIN32 AND NOT WINDOWS)
    17 ENDIF(WIN32 AND NOT WINDOWS)
       
    18 
    18 
    19 
    19 # Bleh, let's do it for "APPLE" too.
    20 # Bleh, let's do it for "APPLE" too.
    20 if(APPLE AND NOT MACOSX)
    21 IF(APPLE AND NOT MACOSX)
    21     set(MACOSX true)
    22     SET(MACOSX TRUE)
    22 endif(APPLE AND NOT MACOSX)
    23 ENDIF(APPLE AND NOT MACOSX)
    23 
    24 
    24 # For now, Haiku and BeOS are the same, as far as the build system cares.
    25 # For now, Haiku and BeOS are the same, as far as the build system cares.
    25 if(HAIKU AND NOT BEOS)
    26 IF(HAIKU AND NOT BEOS)
    26     set(BEOS true)
    27     SET(BEOS TRUE)
    27 endif(HAIKU AND NOT BEOS)
    28 ENDIF(HAIKU AND NOT BEOS)
    28 
    29 
    29 if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
    30 IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
    30     set(SOLARIS true)
    31     SET(SOLARIS TRUE)
    31 endif(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
    32 ENDIF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
    32 
    33 
    33 include(CheckIncludeFile)
    34 INCLUDE(CheckIncludeFile)
    34 include(CheckLibraryExists)
    35 INCLUDE(CheckLibraryExists)
    35 include(CheckCSourceCompiles)
    36 INCLUDE(CheckCSourceCompiles)
    36 
    37 
       
    38 find_package(SDL REQUIRED)
    37 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
    39 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
    38 include_directories(${SDL_INCLUDE_DIR}) #hw
    40 include_directories(${SDL_INCLUDE_DIR}) #hw
    39 include_directories(${LUA_INCLUDE_DIR}) #hw
    41 include_directories(${LUA_INCLUDE_DIR}) #hw
    40 
    42 
    41 if(MACOSX)
    43 IF(MACOSX)
    42     # Fallback to older OS X on PowerPC to support wider range of systems...
    44     # Fallback to older OS X on PowerPC to support wider range of systems...
    43     if(CMAKE_OSX_ARCHITECTURES MATCHES ppc)
    45     IF(CMAKE_OSX_ARCHITECTURES MATCHES ppc)
    44         add_definitions(-DMAC_OS_X_VERSION_MIN_REQUIRED=1020)
    46         ADD_DEFINITIONS(-DMAC_OS_X_VERSION_MIN_REQUIRED=1020)
    45         set(OTHER_LDFLAGS ${OTHER_LDFLAGS} " -mmacosx-version-min=10.2")
    47         SET(OTHER_LDFLAGS ${OTHER_LDFLAGS} " -mmacosx-version-min=10.2")
    46     endif(CMAKE_OSX_ARCHITECTURES MATCHES ppc)
    48     ENDIF(CMAKE_OSX_ARCHITECTURES MATCHES ppc)
    47 
    49 
    48     # Need these everywhere...
    50     # Need these everywhere...
    49     add_definitions(-fno-common)
    51     ADD_DEFINITIONS(-fno-common)
    50     set(OTHER_LDFLAGS ${OTHER_LDFLAGS} "-framework IOKit")
    52     SET(OTHER_LDFLAGS ${OTHER_LDFLAGS} "-framework IOKit")
    51 endif(MACOSX)
    53 ENDIF(MACOSX)
    52 
    54 
    53 # Add some gcc-specific command lines.
    55 # Add some gcc-specific command lines.
    54 if(CMAKE_COMPILER_IS_GNUCC)
    56 IF(CMAKE_COMPILER_IS_GNUCC)
    55     # Always build with debug symbols...you can strip it later.
    57     # Always build with debug symbols...you can strip it later.
    56     add_definitions(-g -pipe -Werror -fsigned-char)
    58     ADD_DEFINITIONS(-g -pipe -Werror -fsigned-char)
    57 
    59 
    58     # Stupid BeOS generates warnings in the system headers.
    60     # Stupid BeOS generates warnings in the system headers.
    59     if(NOT BEOS)
    61     IF(NOT BEOS)
    60         add_definitions(-Wall)
    62         ADD_DEFINITIONS(-Wall)
    61     endif(NOT BEOS)
    63     ENDIF(NOT BEOS)
    62 
    64 
    63     CHECK_C_SOURCE_COMPILES("
    65     CHECK_C_SOURCE_COMPILES("
    64         #if ((defined(__GNUC__)) && (__GNUC__ >= 4))
    66         #if ((defined(__GNUC__)) && (__GNUC__ >= 4))
    65         int main(int argc, char **argv) { int is_gcc4 = 1; return 0; }
    67         int main(int argc, char **argv) { int is_gcc4 = 1; return 0; }
    66         #else
    68         #else
    67         #error This is not gcc4.
    69         #error This is not gcc4.
    68         #endif
    70         #endif
    69     " PHYSFS_IS_GCC4)
    71     " PHYSFS_IS_GCC4)
    70 
    72 
    71     if(PHYSFS_IS_GCC4)
    73     IF(PHYSFS_IS_GCC4)
    72         # Not supported on several operating systems at this time.
    74         # Not supported on several operating systems at this time.
    73         if(NOT SOLARIS AND NOT WINDOWS)
    75         IF(NOT SOLARIS AND NOT WINDOWS)
    74             add_definitions(-fvisibility=hidden)
    76             ADD_DEFINITIONS(-fvisibility=hidden)
    75         endif(NOT SOLARIS AND NOT WINDOWS)
    77         ENDIF(NOT SOLARIS AND NOT WINDOWS)
    76     endif(PHYSFS_IS_GCC4)
    78     ENDIF(PHYSFS_IS_GCC4)
    77 
    79 
    78     # Don't use -rpath.
    80     # Don't use -rpath.
    79     set(CMAKE_SKIP_RPATH ON CACHE BOOL "Skip RPATH" FORCE)
    81     SET(CMAKE_SKIP_RPATH ON CACHE BOOL "Skip RPATH" FORCE)
    80 endif(CMAKE_COMPILER_IS_GNUCC)
    82 ENDIF(CMAKE_COMPILER_IS_GNUCC)
    81 
    83 
    82 if(CMAKE_C_COMPILER_ID STREQUAL "SunPro")
    84 IF(CMAKE_C_COMPILER_ID STREQUAL "SunPro")
    83     add_definitions(-erroff=E_EMPTY_TRANSLATION_UNIT)
    85     ADD_DEFINITIONS(-erroff=E_EMPTY_TRANSLATION_UNIT)
    84     add_definitions(-xldscope=hidden)
    86     ADD_DEFINITIONS(-xldscope=hidden)
    85 endif(CMAKE_C_COMPILER_ID STREQUAL "SunPro")
    87 ENDIF(CMAKE_C_COMPILER_ID STREQUAL "SunPro")
    86 
    88 
    87 if(MSVC)
    89 IF(MSVC)
    88     # VS.NET 8.0 got really really anal about strcpy, etc, which even if we
    90     # VS.NET 8.0 got really really anal about strcpy, etc, which even if we
    89     #  cleaned up our code, zlib, etc still use...so disable the warning.
    91     #  cleaned up our code, zlib, etc still use...so disable the warning.
    90     add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
    92     ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS=1)
    91 endif(MSVC)
    93 ENDIF(MSVC)
    92 
    94 
    93 # Basic chunks of source code ...
    95 # Basic chunks of source code ...
    94 
    96 
    95 set(LZMA_SRCS
    97 SET(LZMA_SRCS
    96     src/lzma/C/7zCrc.c
    98     src/lzma/C/7zCrc.c
    97     src/lzma/C/Archive/7z/7zBuffer.c
    99     src/lzma/C/Archive/7z/7zBuffer.c
    98     src/lzma/C/Archive/7z/7zDecode.c
   100     src/lzma/C/Archive/7z/7zDecode.c
    99     src/lzma/C/Archive/7z/7zExtract.c
   101     src/lzma/C/Archive/7z/7zExtract.c
   100     src/lzma/C/Archive/7z/7zHeader.c
   102     src/lzma/C/Archive/7z/7zHeader.c
   104     src/lzma/C/Compress/Branch/BranchX86.c
   106     src/lzma/C/Compress/Branch/BranchX86.c
   105     src/lzma/C/Compress/Branch/BranchX86_2.c
   107     src/lzma/C/Compress/Branch/BranchX86_2.c
   106     src/lzma/C/Compress/Lzma/LzmaDecode.c
   108     src/lzma/C/Compress/Lzma/LzmaDecode.c
   107 )
   109 )
   108 
   110 
   109 if(BEOS)
   111 IF(BEOS)
   110     # We add this explicitly, since we don't want CMake to think this
   112     # We add this explicitly, since we don't want CMake to think this
   111     #  is a C++ project unless we're on BeOS.
   113     #  is a C++ project unless we're on BeOS.
   112     set(PHYSFS_BEOS_SRCS src/platform_beos.cpp)
   114     SET(PHYSFS_BEOS_SRCS src/platform_beos.cpp)
   113     find_library(BE_LIBRARY be)
   115     FIND_LIBRARY(BE_LIBRARY be)
   114     find_library(ROOT_LIBRARY root)
   116     FIND_LIBRARY(ROOT_LIBRARY root)
   115     set(OPTIONAL_LIBRARY_LIBS ${OPTIONAL_LIBRARY_LIBS} ${BE_LIBRARY} ${ROOT_LIBRARY})
   117     SET(OPTIONAL_LIBRARY_LIBS ${OPTIONAL_LIBRARY_LIBS} ${BE_LIBRARY} ${ROOT_LIBRARY})
   116 endif(BEOS)
   118 ENDIF(BEOS)
   117 
   119 
   118 # Almost everything is "compiled" here, but things that don't apply to the
   120 # Almost everything is "compiled" here, but things that don't apply to the
   119 #  build are #ifdef'd out. This is to make it easy to embed PhysicsFS into
   121 #  build are #ifdef'd out. This is to make it easy to embed PhysicsFS into
   120 #  another project or bring up a new build system: just compile all the source
   122 #  another project or bring up a new build system: just compile all the source
   121 #  code and #define the things you want.
   123 #  code and #define the things you want.
   122 set(PHYSFS_SRCS
   124 SET(PHYSFS_SRCS
   123     src/physfs.c
   125     src/physfs.c
   124     src/physfs_byteorder.c
   126     src/physfs_byteorder.c
   125     src/physfs_unicode.c
   127     src/physfs_unicode.c
   126     src/platform_posix.c
   128     src/platform_posix.c
   127     src/platform_unix.c
   129     src/platform_unix.c
   146 )
   148 )
   147 
   149 
   148 
   150 
   149 # platform layers ...
   151 # platform layers ...
   150 
   152 
   151 if(UNIX)
   153 IF(UNIX)
   152     if(BEOS)
   154     IF(BEOS)
   153         set(PHYSFS_HAVE_CDROM_SUPPORT true)
   155         SET(PHYSFS_HAVE_CDROM_SUPPORT TRUE)
   154         set(PHYSFS_HAVE_THREAD_SUPPORT true)
   156         SET(PHYSFS_HAVE_THREAD_SUPPORT TRUE)
   155         set(HAVE_PTHREAD_H true)
   157         SET(HAVE_PTHREAD_H TRUE)
   156     else(BEOS)
   158     ELSE(BEOS)
   157         CHECK_INCLUDE_FILE(sys/ucred.h HAVE_UCRED_H)
   159         CHECK_INCLUDE_FILE(sys/ucred.h HAVE_UCRED_H)
   158         if(HAVE_UCRED_H)
   160         IF(HAVE_UCRED_H)
   159             add_definitions(-DPHYSFS_HAVE_SYS_UCRED_H=1)
   161             ADD_DEFINITIONS(-DPHYSFS_HAVE_SYS_UCRED_H=1)
   160             set(PHYSFS_HAVE_CDROM_SUPPORT false)
   162             SET(PHYSFS_HAVE_CDROM_SUPPORT TRUE)
   161         endif(HAVE_UCRED_H)
   163         ENDIF(HAVE_UCRED_H)
   162 
   164 
   163         CHECK_INCLUDE_FILE(mntent.h HAVE_MNTENT_H)
   165         CHECK_INCLUDE_FILE(mntent.h HAVE_MNTENT_H)
   164         if(HAVE_MNTENT_H)
   166         IF(HAVE_MNTENT_H)
   165             add_definitions(-DPHYSFS_HAVE_MNTENT_H=1)
   167             ADD_DEFINITIONS(-DPHYSFS_HAVE_MNTENT_H=1)
   166             set(PHYSFS_HAVE_CDROM_SUPPORT false)
   168             SET(PHYSFS_HAVE_CDROM_SUPPORT TRUE)
   167         endif(HAVE_MNTENT_H)
   169         ENDIF(HAVE_MNTENT_H)
   168 
   170 
   169         # !!! FIXME: Solaris fails this, because mnttab.h implicitly
   171         # !!! FIXME: Solaris fails this, because mnttab.h implicitly
   170         # !!! FIXME:  depends on other system headers.  :(
   172         # !!! FIXME:  depends on other system headers.  :(
   171         #CHECK_INCLUDE_FILE(sys/mnttab.h HAVE_SYS_MNTTAB_H)
   173         #CHECK_INCLUDE_FILE(sys/mnttab.h HAVE_SYS_MNTTAB_H)
   172         CHECK_C_SOURCE_COMPILES("
   174         CHECK_C_SOURCE_COMPILES("
   173             #include <stdio.h>
   175             #include <stdio.h>
   174             #include <sys/mnttab.h>
   176             #include <sys/mnttab.h>
   175             int main(int argc, char **argv) { return 0; }
   177             int main(int argc, char **argv) { return 0; }
   176         " HAVE_SYS_MNTTAB_H)
   178         " HAVE_SYS_MNTTAB_H)
   177 
   179 
   178         if(HAVE_SYS_MNTTAB_H)
   180         IF(HAVE_SYS_MNTTAB_H)
   179             add_definitions(-DPHYSFS_HAVE_SYS_MNTTAB_H=1)
   181             ADD_DEFINITIONS(-DPHYSFS_HAVE_SYS_MNTTAB_H=1)
   180             set(PHYSFS_HAVE_CDROM_SUPPORT false)
   182             SET(PHYSFS_HAVE_CDROM_SUPPORT TRUE)
   181         endif(HAVE_SYS_MNTTAB_H)
   183         ENDIF(HAVE_SYS_MNTTAB_H)
   182 
   184 
   183         CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
   185         CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
   184         if(HAVE_PTHREAD_H)
   186         IF(HAVE_PTHREAD_H)
   185             set(PHYSFS_HAVE_THREAD_SUPPORT false)
   187             SET(PHYSFS_HAVE_THREAD_SUPPORT TRUE)
   186         endif(HAVE_PTHREAD_H)
   188         ENDIF(HAVE_PTHREAD_H)
   187     endif(BEOS)
   189     ENDIF(BEOS)
   188 endif(UNIX)
   190 ENDIF(UNIX)
   189 
   191 
   190 if(WINDOWS)
   192 IF(WINDOWS)
   191     set(PHYSFS_HAVE_CDROM_SUPPORT true)
   193     SET(PHYSFS_HAVE_CDROM_SUPPORT TRUE)
   192     set(PHYSFS_HAVE_THREAD_SUPPORT true)
   194     SET(PHYSFS_HAVE_THREAD_SUPPORT TRUE)
   193 endif(WINDOWS)
   195 ENDIF(WINDOWS)
   194 
   196 
   195 if(NOT PHYSFS_HAVE_CDROM_SUPPORT)
   197 IF(NOT PHYSFS_HAVE_CDROM_SUPPORT)
   196     add_definitions(-DPHYSFS_NO_CDROM_SUPPORT=1)
   198     ADD_DEFINITIONS(-DPHYSFS_NO_CDROM_SUPPORT=1)
   197     message(WARNING " ***")
   199     MESSAGE(WARNING " ***")
   198     message(WARNING " *** There is no CD-ROM support in this build!")
   200     MESSAGE(WARNING " *** There is no CD-ROM support in this build!")
   199     message(WARNING " *** PhysicsFS will just pretend there are no discs.")
   201     MESSAGE(WARNING " *** PhysicsFS will just pretend there are no discs.")
   200     message(WARNING " *** This may be fine, depending on how PhysicsFS is used,")
   202     MESSAGE(WARNING " *** This may be fine, depending on how PhysicsFS is used,")
   201     message(WARNING " ***   but is this what you REALLY wanted?")
   203     MESSAGE(WARNING " ***   but is this what you REALLY wanted?")
   202     message(WARNING " *** (Maybe fix CMakeLists.txt, or write a platform driver?)")
   204     MESSAGE(WARNING " *** (Maybe fix CMakeLists.txt, or write a platform driver?)")
   203     message(WARNING " ***")
   205     MESSAGE(WARNING " ***")
   204 endif(NOT PHYSFS_HAVE_CDROM_SUPPORT)
   206 ENDIF(NOT PHYSFS_HAVE_CDROM_SUPPORT)
   205 
   207 
   206 if(PHYSFS_HAVE_THREAD_SUPPORT)
   208 IF(PHYSFS_HAVE_THREAD_SUPPORT)
   207     add_definitions(-D_REENTRANT -D_THREAD_SAFE)
   209     ADD_DEFINITIONS(-D_REENTRANT -D_THREAD_SAFE)
   208 else(PHYSFS_HAVE_THREAD_SUPPORT)
   210 ELSE(PHYSFS_HAVE_THREAD_SUPPORT)
   209     add_definitions(-DPHYSFS_NO_THREAD_SUPPORT=1)
   211     ADD_DEFINITIONS(-DPHYSFS_NO_THREAD_SUPPORT=1)
   210     message(WARNING " ***")
   212     MESSAGE(WARNING " ***")
   211     message(WARNING " *** There is no thread support in this build!")
   213     MESSAGE(WARNING " *** There is no thread support in this build!")
   212     message(WARNING " *** PhysicsFS will NOT be reentrant!")
   214     MESSAGE(WARNING " *** PhysicsFS will NOT be reentrant!")
   213     message(WARNING " *** This may be fine, depending on how PhysicsFS is used,")
   215     MESSAGE(WARNING " *** This may be fine, depending on how PhysicsFS is used,")
   214     message(WARNING " ***   but is this what you REALLY wanted?")
   216     MESSAGE(WARNING " ***   but is this what you REALLY wanted?")
   215     message(WARNING " *** (Maybe fix CMakeLists.txt, or write a platform driver?)")
   217     MESSAGE(WARNING " *** (Maybe fix CMakeLists.txt, or write a platform driver?)")
   216     message(WARNING " ***")
   218     MESSAGE(WARNING " ***")
   217 endif(PHYSFS_HAVE_THREAD_SUPPORT)
   219 ENDIF(PHYSFS_HAVE_THREAD_SUPPORT)
   218 
   220 
   219 
   221 
   220 # Archivers ...
   222 # Archivers ...
   221 
   223 
   222 option(PHYSFS_ARCHIVE_ZIP "Enable ZIP support" true)
   224 OPTION(PHYSFS_ARCHIVE_ZIP "Enable ZIP support" TRUE)
   223 if(PHYSFS_ARCHIVE_ZIP)
   225 IF(PHYSFS_ARCHIVE_ZIP)
   224     add_definitions(-DPHYSFS_SUPPORTS_ZIP=1)
   226     ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_ZIP=1)
   225 endif(PHYSFS_ARCHIVE_ZIP)
   227 ENDIF(PHYSFS_ARCHIVE_ZIP)
   226 
   228 
   227 option(PHYSFS_ARCHIVE_7Z "Enable 7zip support" false)
   229 OPTION(PHYSFS_ARCHIVE_7Z "Enable 7zip support" FALSE)
   228 if(PHYSFS_ARCHIVE_7Z)
   230 IF(PHYSFS_ARCHIVE_7Z)
   229     add_definitions(-DPHYSFS_SUPPORTS_7Z=1)
   231     ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_7Z=1)
   230     # !!! FIXME: rename to 7z.c?
   232     # !!! FIXME: rename to 7z.c?
   231     set(PHYSFS_SRCS ${PHYSFS_SRCS} ${LZMA_SRCS})
   233     SET(PHYSFS_SRCS ${PHYSFS_SRCS} ${LZMA_SRCS})
   232 endif(PHYSFS_ARCHIVE_7Z)
   234 ENDIF(PHYSFS_ARCHIVE_7Z)
   233 
   235 
   234 option(PHYSFS_ARCHIVE_GRP "Enable Build Engine GRP support" true)
   236 OPTION(PHYSFS_ARCHIVE_GRP "Enable Build Engine GRP support" TRUE)
   235 if(PHYSFS_ARCHIVE_GRP)
   237 IF(PHYSFS_ARCHIVE_GRP)
   236     add_definitions(-DPHYSFS_SUPPORTS_GRP=1)
   238     ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_GRP=1)
   237 endif(PHYSFS_ARCHIVE_GRP)
   239 ENDIF(PHYSFS_ARCHIVE_GRP)
   238 
   240 
   239 option(PHYSFS_ARCHIVE_WAD "Enable Doom WAD support" true)
   241 OPTION(PHYSFS_ARCHIVE_WAD "Enable Doom WAD support" TRUE)
   240 if(PHYSFS_ARCHIVE_WAD)
   242 IF(PHYSFS_ARCHIVE_WAD)
   241     add_definitions(-DPHYSFS_SUPPORTS_WAD=1)
   243     ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_WAD=1)
   242 endif(PHYSFS_ARCHIVE_WAD)
   244 ENDIF(PHYSFS_ARCHIVE_WAD)
   243 
   245 
   244 option(PHYSFS_ARCHIVE_HOG "Enable Descent I/II HOG support" true)
   246 OPTION(PHYSFS_ARCHIVE_HOG "Enable Descent I/II HOG support" TRUE)
   245 if(PHYSFS_ARCHIVE_HOG)
   247 IF(PHYSFS_ARCHIVE_HOG)
   246     add_definitions(-DPHYSFS_SUPPORTS_HOG=1)
   248     ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_HOG=1)
   247 endif(PHYSFS_ARCHIVE_HOG)
   249 ENDIF(PHYSFS_ARCHIVE_HOG)
   248 
   250 
   249 option(PHYSFS_ARCHIVE_MVL "Enable Descent I/II MVL support" true)
   251 OPTION(PHYSFS_ARCHIVE_MVL "Enable Descent I/II MVL support" TRUE)
   250 if(PHYSFS_ARCHIVE_MVL)
   252 IF(PHYSFS_ARCHIVE_MVL)
   251     add_definitions(-DPHYSFS_SUPPORTS_MVL=1)
   253     ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_MVL=1)
   252 endif(PHYSFS_ARCHIVE_MVL)
   254 ENDIF(PHYSFS_ARCHIVE_MVL)
   253 
   255 
   254 option(PHYSFS_ARCHIVE_QPAK "Enable Quake I/II QPAK support" true)
   256 OPTION(PHYSFS_ARCHIVE_QPAK "Enable Quake I/II QPAK support" TRUE)
   255 if(PHYSFS_ARCHIVE_QPAK)
   257 IF(PHYSFS_ARCHIVE_QPAK)
   256     add_definitions(-DPHYSFS_SUPPORTS_QPAK=1)
   258     ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_QPAK=1)
   257 endif(PHYSFS_ARCHIVE_QPAK)
   259 ENDIF(PHYSFS_ARCHIVE_QPAK)
   258 
   260 
   259 option(PHYSFS_ARCHIVE_ISO9660 "Enable ISO9660 support" true)
   261 OPTION(PHYSFS_ARCHIVE_ISO9660 "Enable ISO9660 support" TRUE)
   260 if(PHYSFS_ARCHIVE_ISO9660)
   262 IF(PHYSFS_ARCHIVE_ISO9660)
   261     add_definitions(-DPHYSFS_SUPPORTS_ISO9660=1)
   263     ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_ISO9660=1)
   262 endif(PHYSFS_ARCHIVE_ISO9660)
   264 ENDIF(PHYSFS_ARCHIVE_ISO9660)
   263 
   265 
   264 #as needed by Hedgewars configuration
   266 #as needed by Hedgewars configuration
   265 if(WINDOWS)
   267 IF(WINDOWS)
   266     option(PHYSFS_BUILD_STATIC "Build static library" false)
   268     OPTION(PHYSFS_BUILD_STATIC "Build static library" FALSE)
   267     option(PHYSFS_BUILD_SHARED "Build shared library" true)
   269     OPTION(PHYSFS_BUILD_SHARED "Build shared library" TRUE)
   268     set(OTHER_LDFLAGS ${OTHER_LDFLAGS} ${SDL_LIBRARY})
   270     SET(OTHER_LDFLAGS ${OTHER_LDFLAGS} ${SDL_LIBRARY})
   269 else(WINDOWS)
   271 ELSE(WINDOWS)
   270     option(PHYSFS_BUILD_STATIC "Build static library" true)
   272     OPTION(PHYSFS_BUILD_STATIC "Build static library" TRUE)
   271     option(PHYSFS_BUILD_SHARED "Build shared library" false)
   273     OPTION(PHYSFS_BUILD_SHARED "Build shared library" FALSE)
   272 endif(WINDOWS)
   274 ENDIF(WINDOWS)
   273 
   275 
   274 if(PHYSFS_BUILD_STATIC)
   276 IF(PHYSFS_BUILD_STATIC)
   275     add_library(physfs STATIC ${PHYSFS_SRCS})
   277     ADD_LIBRARY(physfs STATIC ${PHYSFS_SRCS})
   276     set_target_properties(physfs PROPERTIES OUTPUT_NAME "physfs")
   278     SET_TARGET_PROPERTIES(physfs PROPERTIES OUTPUT_NAME "physfs")
   277     set(PHYSFS_LIB_TARGET physfs)
   279     SET(PHYSFS_LIB_TARGET physfs)
   278     set(PHYSFS_INSTALL_TARGETS ${PHYSFS_INSTALL_TARGETS} ";physfs")
   280     SET(PHYSFS_INSTALL_TARGETS ${PHYSFS_INSTALL_TARGETS} ";physfs")
   279 endif(PHYSFS_BUILD_STATIC)
   281 ENDIF(PHYSFS_BUILD_STATIC)
   280 
   282 
   281 if(PHYSFS_BUILD_SHARED)
   283 IF(PHYSFS_BUILD_SHARED)
   282     find_package(SDL REQUIRED)
   284     ADD_LIBRARY(physfs SHARED ${PHYSFS_SRCS})
   283     add_library(physfs SHARED ${PHYSFS_SRCS})
   285     SET_TARGET_PROPERTIES(physfs PROPERTIES VERSION ${PHYSFS_VERSION})
   284     set_target_properties(physfs PROPERTIES VERSION ${PHYSFS_VERSION})
   286     SET_TARGET_PROPERTIES(physfs PROPERTIES SOVERSION ${PHYSFS_SOVERSION})
   285     set_target_properties(physfs PROPERTIES SOVERSION ${PHYSFS_SOVERSION})
   287     TARGET_LINK_LIBRARIES(physfs ${OPTIONAL_LIBRARY_LIBS} ${OTHER_LDFLAGS})
   286     target_link_libraries(physfs ${OPTIONAL_LIBRARY_LIBS} ${OTHER_LDFLAGS})
   288     SET(PHYSFS_LIB_TARGET physfs)
   287     set(PHYSFS_LIB_TARGET physfs)
   289     SET(PHYSFS_INSTALL_TARGETS ${PHYSFS_INSTALL_TARGETS} ";physfs")
   288     set(PHYSFS_INSTALL_TARGETS ${PHYSFS_INSTALL_TARGETS} ";physfs")
   290     INSTALL(TARGETS ${PHYSFS_INSTALL_TARGETS}
   289     install(TARGETS ${PHYSFS_INSTALL_TARGETS}
   291             RUNTIME DESTINATION ${LIBRARY_OUTPUT_PATH})
   290             RUNTIME DESTINATION bin)
   292 ENDIF(PHYSFS_BUILD_SHARED)
   291 endif(PHYSFS_BUILD_SHARED)
   293 
   292 
   294 IF(NOT PHYSFS_BUILD_SHARED AND NOT PHYSFS_BUILD_STATIC)
   293 if(NOT PHYSFS_BUILD_SHARED AND NOT PHYSFS_BUILD_STATIC)
   295     MESSAGE(FATAL "Both shared and static libraries are disabled!")
   294     message(FATAL "Both shared and static libraries are disabled!")
   296 ENDIF(NOT PHYSFS_BUILD_SHARED AND NOT PHYSFS_BUILD_STATIC)
   295 endif(NOT PHYSFS_BUILD_SHARED AND NOT PHYSFS_BUILD_STATIC)
       
   296 
   297 
   297 # CMake FAQ says I need this...
   298 # CMake FAQ says I need this...
   298 if(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC)
   299 IF(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC)
   299     set_target_properties(physfs PROPERTIES CLEAN_DIRECT_OUTPUT 1)
   300     SET_TARGET_PROPERTIES(physfs PROPERTIES CLEAN_DIRECT_OUTPUT 1)
   300 endif(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC)
   301 ENDIF(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC)
   301 
   302 
   302 option(PHYSFS_BUILD_TEST "Build stdio test program." false)
   303 OPTION(PHYSFS_BUILD_TEST "Build stdio test program." FALSE)
   303 mark_as_advanced(PHYSFS_BUILD_TEST)
   304 MARK_AS_ADVANCED(PHYSFS_BUILD_TEST)
   304 if(PHYSFS_BUILD_TEST)
   305 IF(PHYSFS_BUILD_TEST)
   305     find_path(READLINE_H readline/readline.h)
   306     FIND_PATH(READLINE_H readline/readline.h)
   306     find_path(HISTORY_H readline/history.h)
   307     FIND_PATH(HISTORY_H readline/history.h)
   307     if(READLINE_H AND HISTORY_H)
   308     IF(READLINE_H AND HISTORY_H)
   308         find_library(CURSES_LIBRARY NAMES curses ncurses)
   309         FIND_LIBRARY(CURSES_LIBRARY NAMES curses ncurses)
   309         set(CMAKE_REQUIRED_LIBRARIES ${CURSES_LIBRARY})
   310         SET(CMAKE_REQUIRED_LIBRARIES ${CURSES_LIBRARY})
   310         find_library(READLINE_LIBRARY readline)
   311         FIND_LIBRARY(READLINE_LIBRARY readline)
   311         if(READLINE_LIBRARY)
   312         IF(READLINE_LIBRARY)
   312             set(HAVE_SYSTEM_READLINE true)
   313             SET(HAVE_SYSTEM_READLINE TRUE)
   313             set(TEST_PHYSFS_LIBS ${TEST_PHYSFS_LIBS} ${READLINE_LIBRARY} ${CURSES_LIBRARY})
   314             SET(TEST_PHYSFS_LIBS ${TEST_PHYSFS_LIBS} ${READLINE_LIBRARY} ${CURSES_LIBRARY})
   314             include_directories(${READLINE_H} ${HISTORY_H})
   315             INCLUDE_DIRECTORIES(${READLINE_H} ${HISTORY_H})
   315             add_definitions(-DPHYSFS_HAVE_READLINE=1)
   316             ADD_DEFINITIONS(-DPHYSFS_HAVE_READLINE=1)
   316         endif(READLINE_LIBRARY)
   317         ENDIF(READLINE_LIBRARY)
   317     endif(READLINE_H AND HISTORY_H)
   318     ENDIF(READLINE_H AND HISTORY_H)
   318     add_executable(test_physfs test/test_physfs.c)
   319     ADD_EXECUTABLE(test_physfs test/test_physfs.c)
   319     target_link_libraries(test_physfs ${PHYSFS_LIB_TARGET} ${TEST_PHYSFS_LIBS} ${OTHER_LDFLAGS})
   320     TARGET_LINK_LIBRARIES(test_physfs ${PHYSFS_LIB_TARGET} ${TEST_PHYSFS_LIBS} ${OTHER_LDFLAGS})
   320     set(PHYSFS_INSTALL_TARGETS ${PHYSFS_INSTALL_TARGETS} ";test_physfs")
   321     SET(PHYSFS_INSTALL_TARGETS ${PHYSFS_INSTALL_TARGETS} ";test_physfs")
   321 endif(PHYSFS_BUILD_TEST)
   322 ENDIF(PHYSFS_BUILD_TEST)
   322 
   323 
   323 
   324 
   324 # Scripting language bindings...
   325 # Scripting language bindings...
   325 
   326 
   326 #CMake's SWIG support is basically useless.
   327 #CMake's SWIG support is basically useless.
   327 #FIND_PACKAGE(SWIG)
   328 #FIND_PACKAGE(SWIG)
   328 
   329 
   329 option(PHYSFS_BUILD_SWIG "Build ${_LANG} bindings." false)
   330 OPTION(PHYSFS_BUILD_SWIG "Build ${_LANG} bindings." FALSE)
   330 mark_as_advanced(PHYSFS_BUILD_SWIG)
   331 MARK_AS_ADVANCED(PHYSFS_BUILD_SWIG)
   331 
   332 
   332 find_program(SWIG swig DOC "Path to swig command line app: http://swig.org/")
   333 FIND_PROGRAM(SWIG swig DOC "Path to swig command line app: http://swig.org/")
   333 if(NOT SWIG)
   334 IF(NOT SWIG)
   334     message(STATUS "SWIG not found. You won't be able to build scripting language bindings.")
   335     MESSAGE(STATUS "SWIG not found. You won't be able to build scripting language bindings.")
   335 else(NOT SWIG)
   336 ELSE(NOT SWIG)
   336     mark_as_advanced(SWIG)
   337     MARK_AS_ADVANCED(SWIG)
   337     if(DEFINED CMAKE_BUILD_TYPE)
   338     IF(DEFINED CMAKE_BUILD_TYPE)
   338         if((NOT CMAKE_BUILD_TYPE STREQUAL "") AND (NOT CMAKE_BUILD_TYPE STREQUAL "Debug"))
   339         IF((NOT CMAKE_BUILD_TYPE STREQUAL "") AND (NOT CMAKE_BUILD_TYPE STREQUAL "Debug"))
   339             if(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
   340             IF(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
   340                 set(SWIG_OPT_CFLAGS "-small")
   341                 SET(SWIG_OPT_CFLAGS "-small")
   341             else(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
   342             ELSE(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
   342                 set(SWIG_OPT_CFLAGS "-O")
   343                 SET(SWIG_OPT_CFLAGS "-O")
   343             endif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
   344             ENDIF(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
   344         endif((NOT CMAKE_BUILD_TYPE STREQUAL "") AND (NOT CMAKE_BUILD_TYPE STREQUAL "Debug"))
   345         ENDIF((NOT CMAKE_BUILD_TYPE STREQUAL "") AND (NOT CMAKE_BUILD_TYPE STREQUAL "Debug"))
   345     endif(DEFINED CMAKE_BUILD_TYPE)
   346     ENDIF(DEFINED CMAKE_BUILD_TYPE)
   346 
   347 
   347     set(SWIG_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/physfs-swig-bindings")
   348     SET(SWIG_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/physfs-swig-bindings")
   348 
   349 
   349     macro(CONFIGURE_SWIG_BINDING _LANG _INSTALLPATH _EXTRAOUTPUTS _EXTRACFLAGS _EXTRALDFLAGS)
   350     MACRO(CONFIGURE_SWIG_BINDING _LANG _INSTALLPATH _EXTRAOUTPUTS _EXTRACFLAGS _EXTRALDFLAGS)
   350         string(TOUPPER "${_LANG}" _UPPERLANG)
   351         STRING(TOUPPER "${_LANG}" _UPPERLANG)
   351         string(TOLOWER "${_LANG}" _LOWERLANG)
   352         STRING(TOLOWER "${_LANG}" _LOWERLANG)
   352         set(_TARGET "physfs-${_LOWERLANG}")
   353         SET(_TARGET "physfs-${_LOWERLANG}")
   353         set(_TARGETDIR "${SWIG_OUTPUT_DIR}/${_LOWERLANG}")
   354         SET(_TARGETDIR "${SWIG_OUTPUT_DIR}/${_LOWERLANG}")
   354 
   355 
   355         if(NOT EXISTS "${_TARGETDIR}")
   356         IF(NOT EXISTS "${_TARGETDIR}")
   356             file(MAKE_DIRECTORY "${_TARGETDIR}")
   357             FILE(MAKE_DIRECTORY "${_TARGETDIR}")
   357         endif(NOT EXISTS "${_TARGETDIR}")
   358         ENDIF(NOT EXISTS "${_TARGETDIR}")
   358 
   359 
   359         if(PHYSFS_BUILD_${_UPPERLANG})
   360         IF(PHYSFS_BUILD_${_UPPERLANG})
   360             add_custom_command(
   361             ADD_CUSTOM_COMMAND(
   361                 OUTPUT "${_TARGETDIR}/${_TARGET}.c" ${_EXTRAOUTPUTS}
   362                 OUTPUT "${_TARGETDIR}/${_TARGET}.c" ${_EXTRAOUTPUTS}
   362                 MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/extras/physfs-swig.i"
   363                 MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/extras/physfs-swig.i"
   363                 COMMAND "${SWIG}"
   364                 COMMAND "${SWIG}"
   364                 ARGS ${SWIG_OPT_CFLAGS} -${_LOWERLANG} -outdir "${_TARGETDIR}" -o "${_TARGETDIR}/${_TARGET}.c" "${CMAKE_CURRENT_SOURCE_DIR}/extras/physfs-swig.i"
   365                 ARGS ${SWIG_OPT_CFLAGS} -${_LOWERLANG} -outdir "${_TARGETDIR}" -o "${_TARGETDIR}/${_TARGET}.c" "${CMAKE_CURRENT_SOURCE_DIR}/extras/physfs-swig.i"
   365                 COMMENT "Generating ${_LANG} bindings..."
   366                 COMMENT "Generating ${_LANG} bindings..."
   366             )
   367             )
   367 
   368 
   368             add_library(${_TARGET} SHARED "${_TARGETDIR}/${_TARGET}.c")
   369             ADD_LIBRARY(${_TARGET} SHARED "${_TARGETDIR}/${_TARGET}.c")
   369             target_link_libraries(${_TARGET} ${PHYSFS_LIB_TARGET})
   370             TARGET_LINK_LIBRARIES(${_TARGET} ${PHYSFS_LIB_TARGET})
   370             set_target_properties(${_TARGET} PROPERTIES
   371             SET_TARGET_PROPERTIES(${_TARGET} PROPERTIES
   371                 COMPILE_FLAGS "${_EXTRACFLAGS}"
   372                 COMPILE_FLAGS "${_EXTRACFLAGS}"
   372                 LINK_FLAGS "${_EXTRALDFLAGS}"
   373                 LINK_FLAGS "${_EXTRALDFLAGS}"
   373                 LIBRARY_OUTPUT_NAME "physfs"
   374                 LIBRARY_OUTPUT_NAME "physfs"
   374                 LIBRARY_OUTPUT_DIRECTORY "${_TARGETDIR}"
   375                 LIBRARY_OUTPUT_DIRECTORY "${_TARGETDIR}"
   375                 CLEAN_DIRECT_OUTPUT 1
   376                 CLEAN_DIRECT_OUTPUT 1
   376             )
   377             )
   377             install(TARGETS ${_TARGET} LIBRARY DESTINATION "${_INSTALLPATH}")
   378             INSTALL(TARGETS ${_TARGET} LIBRARY DESTINATION "${_INSTALLPATH}")
   378             message(STATUS "${_LANG} bindings configured!")
   379             MESSAGE(STATUS "${_LANG} bindings configured!")
   379         else(PHYSFS_BUILD_${_UPPERLANG})
   380         ELSE(PHYSFS_BUILD_${_UPPERLANG})
   380             message(STATUS "Couldn't figure out ${_LANG} configuration. Skipping ${_LANG} bindings.")
   381             MESSAGE(STATUS "Couldn't figure out ${_LANG} configuration. Skipping ${_LANG} bindings.")
   381         endif(PHYSFS_BUILD_${_UPPERLANG})
   382         ENDIF(PHYSFS_BUILD_${_UPPERLANG})
   382     endmacro(CONFIGURE_SWIG_BINDING)
   383     ENDMACRO(CONFIGURE_SWIG_BINDING)
   383 
   384 
   384     macro(ADD_SCRIPT_BINDING_OPTION _VAR _LANG _DEFVAL)
   385     MACRO(ADD_SCRIPT_BINDING_OPTION _VAR _LANG _DEFVAL)
   385         set(BUILDSWIGVAL ${_DEFVAL})
   386         SET(BUILDSWIGVAL ${_DEFVAL})
   386         if(NOT PHYSFS_BUILD_SWIG)
   387         IF(NOT PHYSFS_BUILD_SWIG)
   387             set(BUILDSWIGVAL false)
   388             SET(BUILDSWIGVAL FALSE)
   388         endif(NOT PHYSFS_BUILD_SWIG)
   389         ENDIF(NOT PHYSFS_BUILD_SWIG)
   389         option(${_VAR} "Build ${_LANG} bindings." ${BUILDSWIGVAL})
   390         OPTION(${_VAR} "Build ${_LANG} bindings." ${BUILDSWIGVAL})
   390         mark_as_advanced(${_VAR})
   391         MARK_AS_ADVANCED(${_VAR})
   391     endmacro(ADD_SCRIPT_BINDING_OPTION)
   392     ENDMACRO(ADD_SCRIPT_BINDING_OPTION)
   392 
   393 
   393     ADD_SCRIPT_BINDING_OPTION(PHYSFS_BUILD_PERL "Perl" true)
   394     ADD_SCRIPT_BINDING_OPTION(PHYSFS_BUILD_PERL "Perl" TRUE)
   394     ADD_SCRIPT_BINDING_OPTION(PHYSFS_BUILD_RUBY "Ruby" true)
   395     ADD_SCRIPT_BINDING_OPTION(PHYSFS_BUILD_RUBY "Ruby" TRUE)
   395 endif(NOT SWIG)
   396 ENDIF(NOT SWIG)
   396 
   397 
   397 if(PHYSFS_BUILD_PERL)
   398 IF(PHYSFS_BUILD_PERL)
   398     message(STATUS "Configuring Perl bindings...")
   399     MESSAGE(STATUS "Configuring Perl bindings...")
   399     find_program(PERL perl DOC "Path to perl command line app: http://perl.org/")
   400     FIND_PROGRAM(PERL perl DOC "Path to perl command line app: http://perl.org/")
   400     if(NOT PERL)
   401     IF(NOT PERL)
   401         message(STATUS "Perl not found. You won't be able to build perl bindings.")
   402         MESSAGE(STATUS "Perl not found. You won't be able to build perl bindings.")
   402         set(PHYSFS_BUILD_PERL false)
   403         SET(PHYSFS_BUILD_PERL FALSE)
   403     endif(NOT PERL)
   404     ENDIF(NOT PERL)
   404     mark_as_advanced(PERL)
   405     MARK_AS_ADVANCED(PERL)
   405 
   406 
   406     macro(GET_PERL_CONFIG _KEY _VALUE)
   407     MACRO(GET_PERL_CONFIG _KEY _VALUE)
   407         if(PHYSFS_BUILD_PERL)
   408         IF(PHYSFS_BUILD_PERL)
   408             message(STATUS "Figuring out perl config value '${_KEY}' ...")
   409             MESSAGE(STATUS "Figuring out perl config value '${_KEY}' ...")
   409             execute_process(
   410             EXECUTE_PROCESS(
   410                 COMMAND ${PERL} -w -e "use Config; print \$Config{${_KEY}};"
   411                 COMMAND ${PERL} -w -e "use Config; print \$Config{${_KEY}};"
   411                 RESULT_VARIABLE GET_PERL_CONFIG_RC
   412                 RESULT_VARIABLE GET_PERL_CONFIG_RC
   412                 OUTPUT_VARIABLE ${_VALUE}
   413                 OUTPUT_VARIABLE ${_VALUE}
   413             )
   414             )
   414             if(NOT GET_PERL_CONFIG_RC EQUAL 0)
   415             IF(NOT GET_PERL_CONFIG_RC EQUAL 0)
   415                 message(STATUS "Perl executable ('${PERL}') reported failure: ${GET_PERL_CONFIG_RC}")
   416                 MESSAGE(STATUS "Perl executable ('${PERL}') reported failure: ${GET_PERL_CONFIG_RC}")
   416                 set(PHYSFS_BUILD_PERL false)
   417                 SET(PHYSFS_BUILD_PERL FALSE)
   417             endif(NOT GET_PERL_CONFIG_RC EQUAL 0)
   418             ENDIF(NOT GET_PERL_CONFIG_RC EQUAL 0)
   418             if(NOT ${_VALUE})
   419             IF(NOT ${_VALUE})
   419                 message(STATUS "Perl executable ('${PERL}') didn't have a value for '${_KEY}'")
   420                 MESSAGE(STATUS "Perl executable ('${PERL}') didn't have a value for '${_KEY}'")
   420                 set(PHYSFS_BUILD_PERL false)
   421                 SET(PHYSFS_BUILD_PERL FALSE)
   421             endif(NOT ${_VALUE})
   422             ENDIF(NOT ${_VALUE})
   422 
   423 
   423             if(PHYSFS_BUILD_PERL)
   424             IF(PHYSFS_BUILD_PERL)
   424                 message(STATUS "Perl says: '${${_VALUE}}'.")
   425                 MESSAGE(STATUS "Perl says: '${${_VALUE}}'.")
   425             endif(PHYSFS_BUILD_PERL)
   426             ENDIF(PHYSFS_BUILD_PERL)
   426         endif(PHYSFS_BUILD_PERL)
   427         ENDIF(PHYSFS_BUILD_PERL)
   427     endmacro(GET_PERL_CONFIG)
   428     ENDMACRO(GET_PERL_CONFIG)
   428 
   429 
   429     # !!! FIXME: installsitearch might be the wrong location.
   430     # !!! FIXME: installsitearch might be the wrong location.
   430     GET_PERL_CONFIG("archlibexp" PERL_INCLUDE_PATH)
   431     GET_PERL_CONFIG("archlibexp" PERL_INCLUDE_PATH)
   431     GET_PERL_CONFIG("ccflags" PERL_CCFLAGS)
   432     GET_PERL_CONFIG("ccflags" PERL_CCFLAGS)
   432     GET_PERL_CONFIG("ldflags" PERL_LDFLAGS)
   433     GET_PERL_CONFIG("ldflags" PERL_LDFLAGS)
   433     GET_PERL_CONFIG("installsitearch" PERL_INSTALL_PATH)
   434     GET_PERL_CONFIG("installsitearch" PERL_INSTALL_PATH)
   434 
   435 
   435     # !!! FIXME: this test for Mac OS X is wrong.
   436     # !!! FIXME: this test for Mac OS X is wrong.
   436     if(MACOSX)
   437     IF(MACOSX)
   437         GET_PERL_CONFIG("libperl" PERL_LIBPERL)
   438         GET_PERL_CONFIG("libperl" PERL_LIBPERL)
   438         set(TMPLIBPERL "${PERL_LIBPERL}")
   439         SET(TMPLIBPERL "${PERL_LIBPERL}")
   439         string(REGEX REPLACE "^lib" "" TMPLIBPERL "${TMPLIBPERL}")
   440         STRING(REGEX REPLACE "^lib" "" TMPLIBPERL "${TMPLIBPERL}")
   440         string(REGEX REPLACE "\\.so$" "" TMPLIBPERL "${TMPLIBPERL}")
   441         STRING(REGEX REPLACE "\\.so$" "" TMPLIBPERL "${TMPLIBPERL}")
   441         string(REGEX REPLACE "\\.dylib$" "" TMPLIBPERL "${TMPLIBPERL}")
   442         STRING(REGEX REPLACE "\\.dylib$" "" TMPLIBPERL "${TMPLIBPERL}")
   442         string(REGEX REPLACE "\\.dll$" "" TMPLIBPERL "${TMPLIBPERL}")
   443         STRING(REGEX REPLACE "\\.dll$" "" TMPLIBPERL "${TMPLIBPERL}")
   443         if(NOT "${TMPLIBPERL}" STREQUAL "${PERL_LIBPERL}")
   444         IF(NOT "${TMPLIBPERL}" STREQUAL "${PERL_LIBPERL}")
   444             message(STATUS "Stripped '${PERL_LIBPERL}' down to '${TMPLIBPERL}'.")
   445             MESSAGE(STATUS "Stripped '${PERL_LIBPERL}' down to '${TMPLIBPERL}'.")
   445             set(PERL_LIBPERL "${TMPLIBPERL}")
   446             SET(PERL_LIBPERL "${TMPLIBPERL}")
   446         endif(NOT "${TMPLIBPERL}" STREQUAL "${PERL_LIBPERL}")
   447         ENDIF(NOT "${TMPLIBPERL}" STREQUAL "${PERL_LIBPERL}")
   447         set(PERL_LIBPERL "-l${PERL_LIBPERL}")
   448         SET(PERL_LIBPERL "-l${PERL_LIBPERL}")
   448     endif(MACOSX)
   449     ENDIF(MACOSX)
   449 
   450 
   450     CONFIGURE_SWIG_BINDING(Perl "${PERL_INSTALL_PATH}" "${SWIG_OUTPUT_DIR}/perl/physfs.pm" "\"-I${PERL_INCLUDE_PATH}/CORE\" ${PERL_CCFLAGS} -w" "\"-L${PERL_INCLUDE_PATH}/CORE\" ${PERL_LIBPERL} ${PERL_LDFLAGS}")
   451     CONFIGURE_SWIG_BINDING(Perl "${PERL_INSTALL_PATH}" "${SWIG_OUTPUT_DIR}/perl/physfs.pm" "\"-I${PERL_INCLUDE_PATH}/CORE\" ${PERL_CCFLAGS} -w" "\"-L${PERL_INCLUDE_PATH}/CORE\" ${PERL_LIBPERL} ${PERL_LDFLAGS}")
   451     install(FILES "${SWIG_OUTPUT_DIR}/perl/physfs.pm" DESTINATION "${PERL_INSTALL_PATH}")
   452     INSTALL(FILES "${SWIG_OUTPUT_DIR}/perl/physfs.pm" DESTINATION "${PERL_INSTALL_PATH}")
   452     install(
   453     INSTALL(
   453         FILES test/test_physfs.pl
   454         FILES test/test_physfs.pl
   454         DESTINATION bin
   455         DESTINATION bin
   455         PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
   456         PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
   456                     GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
   457                     GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
   457     )
   458     )
   458 endif(PHYSFS_BUILD_PERL)
   459 ENDIF(PHYSFS_BUILD_PERL)
   459 
   460 
   460 # !!! FIXME: lots of cut-and-paste from perl bindings.
   461 # !!! FIXME: lots of cut-and-paste from perl bindings.
   461 if(PHYSFS_BUILD_RUBY)
   462 IF(PHYSFS_BUILD_RUBY)
   462     message(STATUS "Configuring Ruby bindings...")
   463     MESSAGE(STATUS "Configuring Ruby bindings...")
   463     find_program(RUBY ruby DOC "Path to ruby command line app: http://ruby-lang.org/")
   464     FIND_PROGRAM(RUBY ruby DOC "Path to ruby command line app: http://ruby-lang.org/")
   464     if(NOT RUBY)
   465     IF(NOT RUBY)
   465         message(STATUS "Ruby not found. You won't be able to build ruby bindings.")
   466         MESSAGE(STATUS "Ruby not found. You won't be able to build ruby bindings.")
   466         set(PHYSFS_BUILD_RUBY FALSE)
   467         SET(PHYSFS_BUILD_RUBY FALSE)
   467     endif(NOT RUBY)
   468     ENDIF(NOT RUBY)
   468     mark_as_advanced(RUBY)
   469     MARK_AS_ADVANCED(RUBY)
   469 
   470 
   470     macro(GET_RUBY_CONFIG _KEY _VALUE)
   471     MACRO(GET_RUBY_CONFIG _KEY _VALUE)
   471         if(PHYSFS_BUILD_RUBY)
   472         IF(PHYSFS_BUILD_RUBY)
   472             message(STATUS "Figuring out ruby config value '${_KEY}' ...")
   473             MESSAGE(STATUS "Figuring out ruby config value '${_KEY}' ...")
   473             execute_process(
   474             EXECUTE_PROCESS(
   474                 COMMAND ${RUBY} -e "require 'rbconfig'; puts RbConfig::CONFIG['${_KEY}'];"
   475                 COMMAND ${RUBY} -e "require 'rbconfig'; puts RbConfig::CONFIG['${_KEY}'];"
   475                 RESULT_VARIABLE GET_RUBY_CONFIG_RC
   476                 RESULT_VARIABLE GET_RUBY_CONFIG_RC
   476                 OUTPUT_VARIABLE ${_VALUE}
   477                 OUTPUT_VARIABLE ${_VALUE}
   477                 OUTPUT_STRIP_TRAILING_WHITESPACE
   478                 OUTPUT_STRIP_TRAILING_WHITESPACE
   478             )
   479             )
   479             if(NOT GET_RUBY_CONFIG_RC EQUAL 0)
   480             IF(NOT GET_RUBY_CONFIG_RC EQUAL 0)
   480                 message(STATUS "Ruby executable ('${RUBY}') reported failure: ${GET_RUBY_CONFIG_RC}")
   481                 MESSAGE(STATUS "Ruby executable ('${RUBY}') reported failure: ${GET_RUBY_CONFIG_RC}")
   481                 set(PHYSFS_BUILD_RUBY FALSE)
   482                 SET(PHYSFS_BUILD_RUBY FALSE)
   482             endif(NOT GET_RUBY_CONFIG_RC EQUAL 0)
   483             ENDIF(NOT GET_RUBY_CONFIG_RC EQUAL 0)
   483             if(NOT ${_VALUE})
   484             IF(NOT ${_VALUE})
   484                 message(STATUS "Ruby executable ('${RUBY}') didn't have a value for '${_KEY}'")
   485                 MESSAGE(STATUS "Ruby executable ('${RUBY}') didn't have a value for '${_KEY}'")
   485                 set(PHYSFS_BUILD_RUBY FALSE)
   486                 SET(PHYSFS_BUILD_RUBY FALSE)
   486             endif(NOT ${_VALUE})
   487             ENDIF(NOT ${_VALUE})
   487 
   488 
   488             if(PHYSFS_BUILD_RUBY)
   489             IF(PHYSFS_BUILD_RUBY)
   489                 message(STATUS "Ruby says: '${${_VALUE}}'.")
   490                 MESSAGE(STATUS "Ruby says: '${${_VALUE}}'.")
   490             endif(PHYSFS_BUILD_RUBY)
   491             ENDIF(PHYSFS_BUILD_RUBY)
   491         endif(PHYSFS_BUILD_RUBY)
   492         ENDIF(PHYSFS_BUILD_RUBY)
   492     endmacro(GET_RUBY_CONFIG)
   493     ENDMACRO(GET_RUBY_CONFIG)
   493 
   494 
   494     GET_RUBY_CONFIG("archdir" RUBY_INCLUDE_PATH)
   495     GET_RUBY_CONFIG("archdir" RUBY_INCLUDE_PATH)
   495     GET_RUBY_CONFIG("CFLAGS" RUBY_CCFLAGS)
   496     GET_RUBY_CONFIG("CFLAGS" RUBY_CCFLAGS)
   496     GET_RUBY_CONFIG("LDFLAGS" RUBY_LDFLAGS)
   497     GET_RUBY_CONFIG("LDFLAGS" RUBY_LDFLAGS)
   497     GET_RUBY_CONFIG("sitearchdir" RUBY_INSTALL_PATH)
   498     GET_RUBY_CONFIG("sitearchdir" RUBY_INSTALL_PATH)
   498     GET_RUBY_CONFIG("LIBRUBYARG_SHARED" RUBY_LIBRUBY)
   499     GET_RUBY_CONFIG("LIBRUBYARG_SHARED" RUBY_LIBRUBY)
   499     GET_RUBY_CONFIG("libdir" RUBY_LIBDIR)
   500     GET_RUBY_CONFIG("libdir" RUBY_LIBDIR)
   500 
   501 
   501     CONFIGURE_SWIG_BINDING(Ruby "${RUBY_INSTALL_PATH}" "" "\"-I${RUBY_INCLUDE_PATH}\" ${RUBY_CCFLAGS} -w" "\"-L${RUBY_LIBDIR}\" ${RUBY_LIBRUBY} ${RUBY_LDFLAGS}")
   502     CONFIGURE_SWIG_BINDING(Ruby "${RUBY_INSTALL_PATH}" "" "\"-I${RUBY_INCLUDE_PATH}\" ${RUBY_CCFLAGS} -w" "\"-L${RUBY_LIBDIR}\" ${RUBY_LIBRUBY} ${RUBY_LDFLAGS}")
   502     set_target_properties(physfs-ruby PROPERTIES PREFIX "")
   503     SET_TARGET_PROPERTIES(physfs-ruby PROPERTIES PREFIX "")
   503     install(
   504     INSTALL(
   504         FILES test/test_physfs.rb
   505         FILES test/test_physfs.rb
   505         DESTINATION bin
   506         DESTINATION bin
   506         PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
   507         PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
   507                     GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
   508                     GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
   508     )
   509     )
   509 endif(PHYSFS_BUILD_RUBY)
   510 ENDIF(PHYSFS_BUILD_RUBY)
   510 
   511 
   511 
   512 
   512 #INSTALL(TARGETS ${PHYSFS_INSTALL_TARGETS}
   513 #INSTALL(TARGETS ${PHYSFS_INSTALL_TARGETS}
   513 #        RUNTIME DESTINATION bin
   514 #        RUNTIME DESTINATION bin
   514 #        LIBRARY DESTINATION lib${LIB_SUFFIX}
   515 #        LIBRARY DESTINATION lib${LIB_SUFFIX}
   515 #        ARCHIVE DESTINATION lib${LIB_SUFFIX})
   516 #        ARCHIVE DESTINATION lib${LIB_SUFFIX})
   516 #INSTALL(FILES src/physfs.h DESTINATION include)
   517 #INSTALL(FILES src/physfs.h DESTINATION include)
   517 
   518 
   518 if(UNIX)
   519 IF(UNIX)
   519     set(PHYSFS_TARBALL "${CMAKE_CURRENT_SOURCE_DIR}/../physfs-${PHYSFS_VERSION}.tar.gz")
   520     SET(PHYSFS_TARBALL "${CMAKE_CURRENT_SOURCE_DIR}/../physfs-${PHYSFS_VERSION}.tar.gz")
   520     add_custom_target(
   521     ADD_CUSTOM_TARGET(
   521         dist
   522         dist
   522         hg archive -t tgz "${PHYSFS_TARBALL}"
   523         hg archive -t tgz "${PHYSFS_TARBALL}"
   523         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
   524         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
   524         COMMENT "Building source tarball '${PHYSFS_TARBALL}'..."
   525         COMMENT "Building source tarball '${PHYSFS_TARBALL}'..."
   525     )
   526     )
   527 #        uninstall
   528 #        uninstall
   528 #        "${CMAKE_CURRENT_SOURCE_DIR}/extras/uninstall.sh"
   529 #        "${CMAKE_CURRENT_SOURCE_DIR}/extras/uninstall.sh"
   529 #        WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
   530 #        WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
   530 #        COMMENT "Uninstall the project..."
   531 #        COMMENT "Uninstall the project..."
   531 #    )
   532 #    )
   532 endif(UNIX)
   533 ENDIF(UNIX)
   533 
   534 
   534 macro(MESSAGE_BOOL_OPTION _NAME _VALUE)
   535 MACRO(MESSAGE_BOOL_OPTION _NAME _VALUE)
   535     if(${_VALUE})
   536     IF(${_VALUE})
   536         message(STATUS "  ${_NAME}: enabled")
   537         MESSAGE(STATUS "  ${_NAME}: enabled")
   537     else(${_VALUE})
   538     ELSE(${_VALUE})
   538         message(STATUS "  ${_NAME}: disabled")
   539         MESSAGE(STATUS "  ${_NAME}: disabled")
   539     endif(${_VALUE})
   540     ENDIF(${_VALUE})
   540 endmacro(MESSAGE_BOOL_OPTION)
   541 ENDMACRO(MESSAGE_BOOL_OPTION)
   541 
   542 
   542 message(STATUS "PhysicsFS will build with the following options:")
   543 MESSAGE(STATUS "PhysicsFS will build with the following options:")
   543 MESSAGE_BOOL_OPTION("ZIP support" PHYSFS_ARCHIVE_ZIP)
   544 MESSAGE_BOOL_OPTION("ZIP support" PHYSFS_ARCHIVE_ZIP)
   544 MESSAGE_BOOL_OPTION("7zip support" PHYSFS_ARCHIVE_7Z)
   545 MESSAGE_BOOL_OPTION("7zip support" PHYSFS_ARCHIVE_7Z)
   545 MESSAGE_BOOL_OPTION("GRP support" PHYSFS_ARCHIVE_GRP)
   546 MESSAGE_BOOL_OPTION("GRP support" PHYSFS_ARCHIVE_GRP)
   546 MESSAGE_BOOL_OPTION("WAD support" PHYSFS_ARCHIVE_WAD)
   547 MESSAGE_BOOL_OPTION("WAD support" PHYSFS_ARCHIVE_WAD)
   547 MESSAGE_BOOL_OPTION("HOG support" PHYSFS_ARCHIVE_HOG)
   548 MESSAGE_BOOL_OPTION("HOG support" PHYSFS_ARCHIVE_HOG)
   552 MESSAGE_BOOL_OPTION("Build static library" PHYSFS_BUILD_STATIC)
   553 MESSAGE_BOOL_OPTION("Build static library" PHYSFS_BUILD_STATIC)
   553 MESSAGE_BOOL_OPTION("Build shared library" PHYSFS_BUILD_SHARED)
   554 MESSAGE_BOOL_OPTION("Build shared library" PHYSFS_BUILD_SHARED)
   554 MESSAGE_BOOL_OPTION("Build Perl bindings" PHYSFS_BUILD_PERL)
   555 MESSAGE_BOOL_OPTION("Build Perl bindings" PHYSFS_BUILD_PERL)
   555 MESSAGE_BOOL_OPTION("Build Ruby bindings" PHYSFS_BUILD_RUBY)
   556 MESSAGE_BOOL_OPTION("Build Ruby bindings" PHYSFS_BUILD_RUBY)
   556 MESSAGE_BOOL_OPTION("Build stdio test program" PHYSFS_BUILD_TEST)
   557 MESSAGE_BOOL_OPTION("Build stdio test program" PHYSFS_BUILD_TEST)
   557 if(PHYSFS_BUILD_TEST)
   558 IF(PHYSFS_BUILD_TEST)
   558     MESSAGE_BOOL_OPTION("  Use readline in test program" HAVE_SYSTEM_READLINE)
   559     MESSAGE_BOOL_OPTION("  Use readline in test program" HAVE_SYSTEM_READLINE)
   559 endif(PHYSFS_BUILD_TEST)
   560 ENDIF(PHYSFS_BUILD_TEST)
   560 
   561 
   561 # end of CMakeLists.txt ...
   562 # end of CMakeLists.txt ...
   562 
   563