CMakeLists.txt
changeset 802 d04103af68a5
parent 801 a6d25b52f2c7
child 803 4b1e0994ab97
--- a/CMakeLists.txt	Sun Mar 11 08:33:15 2007 +0000
+++ b/CMakeLists.txt	Sun Mar 11 08:37:01 2007 +0000
@@ -231,10 +231,29 @@
     ENDIF(PHYSFS_INTERNAL_ZLIB)
 ENDIF(PHYSFS_NEED_ZLIB)
 
-
+OPTION(PHYSFS_BUILD_STATIC "Build static library" TRUE)
+IF(PHYSFS_BUILD_STATIC)
+    ADD_LIBRARY(physfs-static STATIC ${PHYSFS_SRCS})
+    SET_TARGET_PROPERTIES(physfs-static PROPERTIES OUTPUT_NAME "physfs")
+    SET(PHYSFS_LIB_TARGET physfs-static)
+ENDIF(PHYSFS_BUILD_STATIC)
 
-ADD_LIBRARY(physfs SHARED ${PHYSFS_SRCS})
-TARGET_LINK_LIBRARIES(physfs ${OPTIONAL_LIBRARY_LIBS} ${OTHER_LDFLAGS})
+OPTION(PHYSFS_BUILD_SHARED "Build shared library" TRUE)
+IF(PHYSFS_BUILD_SHARED)
+    ADD_LIBRARY(physfs SHARED ${PHYSFS_SRCS})
+    TARGET_LINK_LIBRARIES(physfs ${OPTIONAL_LIBRARY_LIBS} ${OTHER_LDFLAGS})
+    SET(PHYSFS_LIB_TARGET physfs)
+ENDIF(PHYSFS_BUILD_SHARED)
+
+IF(NOT PHYSFS_BUILD_SHARED AND NOT PHYSFS_BUILD_STATIC)
+    MESSAGE(FATAL "Both shared and static libraries are disabled!")
+ENDIF(NOT PHYSFS_BUILD_SHARED AND NOT PHYSFS_BUILD_STATIC)
+
+# CMake FAQ says I need this...
+IF(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC)
+    SET_TARGET_PROPERTIES(physfs PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+    SET_TARGET_PROPERTIES(physfs-static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+ENDIF(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC)
 
 OPTION(PHYSFS_BUILD_TEST "Build test program." TRUE)
 MARK_AS_ADVANCED(PHYSFS_BUILD_TEST)
@@ -252,7 +271,7 @@
         ENDIF(HAVE_LIBREADLINE AND HAVE_LIBHISTORY)
     ENDIF(HAVE_READLINE_H AND HAVE_HISTORY_H)
     ADD_EXECUTABLE(test_physfs test/test_physfs.c)
-    TARGET_LINK_LIBRARIES(test_physfs physfs ${TEST_PHYSFS_LIBS} ${OTHER_LDFLAGS})
+    TARGET_LINK_LIBRARIES(test_physfs ${PHYSFS_LIB_TARGET} ${TEST_PHYSFS_LIBS} ${OTHER_LDFLAGS})
 ENDIF(PHYSFS_BUILD_TEST)
 
 FIND_PACKAGE(Doxygen)
@@ -282,6 +301,8 @@
 MESSAGE_BOOL_OPTION("CD-ROM drive support" PHYSFS_HAVE_CDROM_SUPPORT)
 MESSAGE_BOOL_OPTION("Thread safety" PHYSFS_HAVE_THREAD_SUPPORT)
 MESSAGE_BOOL_OPTION("Build own zlib" PHYSFS_INTERNAL_ZLIB)
+MESSAGE_BOOL_OPTION("Build static library" PHYSFS_BUILD_STATIC)
+MESSAGE_BOOL_OPTION("Build shared library" PHYSFS_BUILD_SHARED)
 MESSAGE_BOOL_OPTION("Build test program" PHYSFS_BUILD_TEST)
 IF(PHYSFS_BUILD_TEST)
     MESSAGE_BOOL_OPTION("  Use readline in test program" HAVE_SYSTEM_READLINE)