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