summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt21
-rw-r--r--cmake/FindMPG123.cmake28
-rw-r--r--cmake/FindSndFile.cmake87
-rw-r--r--cmake/Findmpg123.cmake40
-rw-r--r--cmake/re3-config.cmake.in5
-rw-r--r--src/CMakeLists.txt79
6 files changed, 136 insertions, 124 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5daf1d15..20a38595 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -23,12 +23,17 @@ if(RE3_INSTALL)
set(RE3_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}/re3")
endif()
-add_subdirectory("vendor/librw")
+option(RE3_VENDORED_LIBRW "Use vendored librw" ON)
+if(RE3_VENDORED_LIBRW)
+ add_subdirectory(vendor/librw)
+else()
+ find_package(librw REQUIRED)
+endif()
add_subdirectory(src)
if(RE3_INSTALL)
include(CMakePackageConfigHelpers)
- configure_package_config_file(re3-config.cmake.in re3-config.cmake
+ configure_package_config_file(cmake/re3-config.cmake.in re3-config.cmake
INSTALL_DESTINATION "${CMAKE_INSTALL_PREFIX}"
)
install(
@@ -40,5 +45,15 @@ if(RE3_INSTALL)
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
)
- include(CMakeCPack.cmake)
+ set(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
+ set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GTA III reversed")
+ set(CPACK_PACKAGE_VENDOR "GTAModding")
+ #FIXME: missing license (https://github.com/GTAmodding/re3/issues/794)
+ #set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/LICENSE")
+ #set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
+ set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_NAME}")
+ set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
+ set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
+
+ include(CPack)
endif()
diff --git a/cmake/FindMPG123.cmake b/cmake/FindMPG123.cmake
deleted file mode 100644
index a9b6dd8b..00000000
--- a/cmake/FindMPG123.cmake
+++ /dev/null
@@ -1,28 +0,0 @@
-# - Find mpg123
-# Find the native mpg123 includes and library
-#
-# MPG123_INCLUDE_DIR - where to find mpg123.h
-# MPG123_LIBRARIES - List of libraries when using mpg123.
-# MPG123_FOUND - True if mpg123 found.
-
-IF(MPG123_INCLUDE_DIR AND MPG123_LIBRARIES)
- # Already in cache, be silent
- SET(MPG123_FIND_QUIETLY TRUE)
-ENDIF(MPG123_INCLUDE_DIR AND MPG123_LIBRARIES)
-
-FIND_PATH(MPG123_INCLUDE_DIR mpg123.h
- PATHS "${MPG123_DIR}"
- PATH_SUFFIXES include
- )
-
-FIND_LIBRARY(MPG123_LIBRARIES NAMES mpg123 mpg123-0
- PATHS "${MPG123_DIR}"
- PATH_SUFFIXES lib
- )
-
-# MARK_AS_ADVANCED(MPG123_LIBRARIES MPG123_INCLUDE_DIR)
-
-# handle the QUIETLY and REQUIRED arguments and set MPG123_FOUND to TRUE if
-# all listed variables are TRUE
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(MPG123 DEFAULT_MSG MPG123_LIBRARIES MPG123_INCLUDE_DIR)
diff --git a/cmake/FindSndFile.cmake b/cmake/FindSndFile.cmake
index 8ae47b70..05ef0510 100644
--- a/cmake/FindSndFile.cmake
+++ b/cmake/FindSndFile.cmake
@@ -4,9 +4,11 @@
#
# Once done this will define
#
-# SNDFILE_FOUND - system has libsndfile
+# SNDFILE_FOUND - system has libsndfile
# SNDFILE_INCLUDE_DIRS - the libsndfile include directory
-# SNDFILE_LIBRARIES - Link these to use libsndfile
+# SNDFILE_LIBRARIES - Link these to use libsndfile
+# SNDFILE_CFLAGS - Compile options to use libsndfile
+# SndFile::SNdFile - Imported library of libsndfile
#
# Copyright (C) 2006 Wengo
#
@@ -15,53 +17,54 @@
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
-if (SNDFILE_LIBRARIES AND SNDFILE_INCLUDE_DIRS)
- # in cache already
- set(SNDFILE_FOUND TRUE)
-else (SNDFILE_LIBRARIES AND SNDFILE_INCLUDE_DIRS)
+find_package(PkgConfig QUIET)
+if(PKG_CONFIG_FOUND)
+ pkg_search_module(PKG_SNDFILE "sndfile")
+endif()
- find_path(SNDFILE_INCLUDE_DIR
+find_path(SNDFILE_INCLUDE_DIR
NAMES
- sndfile.h
+ sndfile.h
+ HINTS
+ ${PKG_SNDFILE_INCLUDE_DIRS}
PATHS
- /usr/include
- /usr/local/include
- /opt/local/include
- /sw/include
- )
-
- find_library(SNDFILE_LIBRARY
+ /usr/include
+ /usr/local/include
+ /opt/local/include
+ /sw/include
+ )
+
+find_library(SNDFILE_LIBRARY
NAMES
- sndfile
+ sndfile
+ HINTS
+ ${PKG_SNDFILE_LIBRARIES}
PATHS
- /usr/lib
- /usr/local/lib
- /opt/local/lib
- /sw/lib
- )
+ /usr/lib
+ /usr/local/lib
+ /opt/local/lib
+ /sw/lib
+)
+
+set(SNDFILE_CFLAGS "${PKG_SNDFILE_CFLAGS_OTHER}" CACHE STRING "CFLAGS of libsndfile")
- set(SNDFILE_INCLUDE_DIRS
- ${SNDFILE_INCLUDE_DIR}
- )
- set(SNDFILE_LIBRARIES
- ${SNDFILE_LIBRARY}
- )
+set(SNDFILE_INCLUDE_DIRS ${SNDFILE_INCLUDE_DIR})
+set(SNDFILE_LIBRARIES ${SNDFILE_LIBRARY})
- if (SNDFILE_INCLUDE_DIRS AND SNDFILE_LIBRARIES)
- set(SNDFILE_FOUND TRUE)
- endif (SNDFILE_INCLUDE_DIRS AND SNDFILE_LIBRARIES)
+if (SNDFILE_INCLUDE_DIRS AND SNDFILE_LIBRARIES)
+set(SNDFILE_FOUND TRUE)
+endif (SNDFILE_INCLUDE_DIRS AND SNDFILE_LIBRARIES)
- if (SNDFILE_FOUND)
- if (NOT SndFile_FIND_QUIETLY)
- message(STATUS "Found libsndfile: ${SNDFILE_LIBRARIES}")
- endif (NOT SndFile_FIND_QUIETLY)
- else (SNDFILE_FOUND)
- if (SndFile_FIND_REQUIRED)
- message(FATAL_ERROR "Could not find libsndfile")
- endif (SndFile_FIND_REQUIRED)
- endif (SNDFILE_FOUND)
- # show the SNDFILE_INCLUDE_DIRS and SNDFILE_LIBRARIES variables only in the advanced view
- mark_as_advanced(SNDFILE_INCLUDE_DIRS SNDFILE_LIBRARIES)
+# handle the QUIETLY and REQUIRED arguments and set SNdFile_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(SndFile DEFAULT_MSG SNDFILE_INCLUDE_DIRS SNDFILE_LIBRARIES)
-endif (SNDFILE_LIBRARIES AND SNDFILE_INCLUDE_DIRS)
+if(NOT TARGET SndFile::SndFile)
+ add_library(__SndFile INTERFACE)
+ target_compile_options(__SndFile INTERFACE ${SNDFILE_CFLAGS})
+ target_include_directories(__SndFile INTERFACE ${SNDFILE_INCLUDE_DIRS})
+ target_link_libraries(__SndFile INTERFACE ${SNDFILE_LIBRARIES})
+ add_library(SndFile::SndFile ALIAS __SndFile)
+endif()
diff --git a/cmake/Findmpg123.cmake b/cmake/Findmpg123.cmake
new file mode 100644
index 00000000..365d65ff
--- /dev/null
+++ b/cmake/Findmpg123.cmake
@@ -0,0 +1,40 @@
+# - Find mpg123
+# Find the native mpg123 includes and library
+#
+# mpg123_INCLUDE_DIR - Where to find mpg123.h
+# mpg123_LIBRARIES - List of libraries when using mpg123.
+# mpg123_CFLAGS - Compile options to use mpg123
+# mpg123_FOUND - True if mpg123 found.
+# MPG123::libmpg123 - Imported library of libmpg123
+
+find_package(PkgConfig QUIET)
+if(PKG_CONFIG_FOUND)
+ pkg_search_module(PKG_MPG123 mpg123)
+endif()
+
+find_path(mpg123_INCLUDE_DIR mpg123.h
+ HINTS ${PKG_MPG123_INCLUDE_DIRS}
+ PATHS "${mpg123_DIR}"
+ PATH_SUFFIXES include
+)
+
+find_library(mpg123_LIBRARIES NAMES mpg123 mpg123-0
+ HINTS ${PKG_MPG123_LIBRARIES}
+ PATHS "${mpg123_DIR}"
+ PATH_SUFFIXES lib
+)
+
+set(mpg123_CFLAGS "${PKG_MPG123_CFLAGS_OTHER}" CACHE STRING "CFLAGS of mpg123")
+
+# handle the QUIETLY and REQUIRED arguments and set mpg123_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(mpg123 DEFAULT_MSG mpg123_LIBRARIES mpg123_INCLUDE_DIR)
+
+if(NOT TARGET MPG123::libmpg123)
+ add_library(__libmpg123 INTERFACE)
+ target_compile_options(__libmpg123 INTERFACE ${mpg123_CFLAGS})
+ target_include_directories(__libmpg123 INTERFACE ${mpg123_INCLUDE_DIR})
+ target_link_libraries(__libmpg123 INTERFACE ${mpg123_LIBRARIES})
+ add_library(MPG123::libmpg123 ALIAS __libmpg123)
+endif()
diff --git a/cmake/re3-config.cmake.in b/cmake/re3-config.cmake.in
new file mode 100644
index 00000000..37e81938
--- /dev/null
+++ b/cmake/re3-config.cmake.in
@@ -0,0 +1,5 @@
+include("${CMAKE_CURRENT_LIST_DIR}/re3-targets.cmake")
+
+set(RE3_AUDIO "@RE3_AUDIO@")
+set(RE3_AUDIOS "@RE3_AUDIOS@")
+set(RE3_PLATFORM @LIBRW_PLATFORM@)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ef322a9a..0b124958 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -2,66 +2,49 @@ set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
if(${RE3_AUDIO} STREQUAL "OAL")
- find_package(OpenAL REQUIRED)
- find_package(MPG123 REQUIRED)
- find_package(SndFile REQUIRED)
+ find_package(OpenAL REQUIRED)
+ find_package(mpg123 REQUIRED)
+ find_package(SndFile REQUIRED)
endif()
-file(GLOB_RECURSE Sources "*.cpp" "*.h")
+file(GLOB_RECURSE RE3_SOURCES "*.cpp" "*.h")
-MACRO(HEADER_DIRECTORIES return_list)
- FILE(GLOB_RECURSE new_list *.cpp)
- SET(dir_list "animation"
- "audio"
- "collision"
- "control"
- "core"
- "entities"
- "extras"
- "fakerw"
- "math"
- "modelinfo"
- "objects"
- "peds"
- "render"
- "rw"
- "save"
- "skel"
- "text"
- "vehicles"
- "weapons")
- FOREACH(file_path ${new_list})
- GET_FILENAME_COMPONENT(dir_path ${file_path} PATH)
- SET(dir_list ${dir_list} ${dir_path})
- ENDFOREACH()
- LIST(REMOVE_DUPLICATES dir_list)
- SET(${return_list} ${dir_list})
-ENDMACRO()
+function(header_directories RETURN_LIST)
+ file(GLOB_RECURSE ALL_SRCS *.h *.cpp *.c)
+ set(RELDIRS)
+ foreach(SRC ${ALL_SRCS})
+ file(RELATIVE_PATH RELSRC "${CMAKE_CURRENT_SOURCE_DIR}" "${SRC}")
+ get_filename_component(RELDIR "${RELSRC}" DIRECTORY)
+ list(APPEND RELDIRS ${RELDIR})
+ endforeach()
+ list(REMOVE_DUPLICATES RELDIRS)
+ set(${RETURN_LIST} ${RELDIRS} PARENT_SCOPE)
+endfunction()
-HEADER_DIRECTORIES(header_list)
-include_directories(${header_list})
+header_directories(RE3_INCLUDES)
+include_directories(${RE3_INCLUDES})
+add_executable(re3 ${RE3_SOURCES})
+target_link_libraries(re3 PRIVATE
+ librw::librw
+ Threads::Threads
+)
-add_executable(re3 ${Sources})
-target_link_libraries(re3 librw)
-target_link_libraries(re3 Threads::Threads)
-
-if(${RE3_AUDIO} STREQUAL "OAL")
- target_link_libraries(re3 ${OPENAL_LIBRARY})
- target_link_libraries(re3 ${MPG123_LIBRARIES})
- target_link_libraries(re3 ${SNDFILE_LIBRARIES})
+if(RE3_AUDIO STREQUAL "OAL")
+ target_link_libraries(re3 PRIVATE ${OPENAL_LIBRARY})
+ target_link_libraries(re3 PRIVATE MPG123::libmpg123)
+ target_link_libraries(re3 PRIVATE SndFile::SndFile)
endif()
target_include_directories(re3
INTERFACE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
+ $<INSTALL_INTERFACE:${RE3_INSTALL_INCLUDEDIR}>
)
target_compile_definitions(re3
PRIVATE
"$<IF:$<CONFIG:DEBUG>,DEBUG,NDEBUG>"
- PUBLIC
- "RW_${RE3_PLATFORM}"
)
target_compile_definitions(re3 PRIVATE LIBRW=1 AUDIO_OAL=1)
@@ -71,7 +54,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang
PRIVATE
"-Wall"
)
- if (NOT RE3_PLATFORM_PS2)
+ if (NOT LIBRW_PLATFORM_PS2)
target_compile_options(re3
PRIVATE
"-Wextra"
@@ -94,15 +77,9 @@ set_target_properties(re3
CXX_STANDARD 11
CXX_EXTENSIONS OFF
CXX_STANDARD_REQUIRED ON
- PREFIX ""
)
if(RE3_INSTALL)
- target_include_directories(re3
- INTERFACE
- $<INSTALL_INTERFACE:${RE3_INSTALL_INCLUDEDIR}>
- )
-
install(
TARGETS re3
EXPORT re3-targets