2015-08-20 22:53:48 +02:00
#
#==============================================================================
#
# file : CMakeLists.txt
# created : Aug 5 2015
2022-07-15 19:42:26 +02:00
# copyright : (C) 2015-2022 Joe Thompson
2015-08-20 22:53:48 +02:00
# email : beaglejoe@users.sourceforge.net
2019-02-07 02:35:08 +01:00
# version : $Id$
2015-08-20 22:53:48 +02:00
#
#==============================================================================
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
2020-08-28 08:25:42 +02:00
# the Free Software Foundation, either version 2 of the License, or
2015-08-20 22:53:48 +02:00
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#==============================================================================
#
# (hashtag) starts a comment
2018-11-09 05:03:38 +01:00
cmake_minimum_required ( VERSION 3.4.0 FATAL_ERROR )
2015-08-20 22:53:48 +02:00
2022-10-09 22:14:26 +02:00
project ( 3rdParty VERSION 2.3.0 )
2015-08-20 22:53:48 +02:00
include ( ExternalProject )
include ( CMakeDependentOption )
2020-11-25 02:14:57 +01:00
include ( thirdpartydefinitions.cmake )
2015-08-20 22:53:48 +02:00
2020-07-04 02:20:16 +02:00
message ( STATUS "CMAKE_VERSION = ${CMAKE_VERSION}" )
2015-08-20 22:53:48 +02:00
# Setup some defualts...
# Setup the configuration
if ( NOT CMAKE_BUILD_TYPE )
set ( CMAKE_BUILD_TYPE Release CACHE STRING
" C h o o s e t h e t y p e o f b u i l d , o p t i o n s a r e : N o n e D e b u g R e l e a s e R e l W i t h D e b I n f o M i n S i z e R e l . "
F O R C E )
2020-07-04 02:20:16 +02:00
message ( STATUS "No CMAKE_BUILD_TYPE specified, defaulting to ${CMAKE_BUILD_TYPE}" )
2015-08-20 22:53:48 +02:00
endif ( NOT CMAKE_BUILD_TYPE )
# Setup the install prefix.
if ( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT )
set ( CMAKE_INSTALL_PREFIX "./installed" CACHE PATH "Prefix prepended to install directories" FORCE )
endif ( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT )
2015-08-23 04:34:49 +02:00
if ( MINGW )
link_directories ( /usr/lib /usr/local/lib )
include_directories ( AFTER /usr/include /usr/local/include )
endif ( MINGW )
2015-08-20 22:53:48 +02:00
set ( CMAKE_MODULE_PATH ${ CMAKE_MODULE_PATH } "${CMAKE_SOURCE_DIR}/cmake/" )
2020-07-04 02:20:16 +02:00
set ( EXTERNALS_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/deps" CACHE PATH "" )
2015-08-20 22:53:48 +02:00
set ( EXTERNALS_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/3rdParty" CACHE PATH "" )
set ( EXTERNALS_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${ EXTERNALS_INSTALL_DIR } CACHE PATH "" )
2021-03-20 17:31:21 +01:00
# Need to pass CMAKE_SYSTEM_VERSION to all the projects for the case
# where build is targeting newer system than the build host
if ( CMAKE_SYSTEM_VERSION )
list ( APPEND EXTERNALS_CMAKE_ARGS "-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}" )
endif ( CMAKE_SYSTEM_VERSION )
2022-07-15 03:55:32 +02:00
# CMake's built-in FindCURL.cmake module doesn't set CURL_INCLUDE_DIR and CURL_LIBRARIES
# if it finds CURLConfig.cmake it just returns after setting CURL_FOUND and CURL_DIR
if ( NOT ${ CMAKE_VERSION } VERSION_LESS "3.17.0" )
list ( APPEND EXTERNALS_CMAKE_ARGS -DCURL_NO_CURL_CMAKE=ON )
endif ( NOT ${ CMAKE_VERSION } VERSION_LESS "3.17.0" )
2021-12-14 15:46:29 +01:00
if ( WIN32 )
set ( _max_ext_path "64" )
string ( LENGTH ${ EXTERNALS_PREFIX } _path_length )
if ( _path_length GREATER _max_ext_path )
message ( WARNING "The length of the EXTERNALS_PREFIX (${EXTERNALS_PREFIX}) is possibly too long (${_path_length}) to build OSG" )
if ( ${ CMAKE_SYSTEM_VERSION } LESS 10 )
message ( SEND_ERROR "The length of the EXTERNALS_PREFIX needs to be less than ${_max_ext_path} to build OSG" )
endif ( )
endif ( )
2020-07-04 02:20:16 +02:00
endif ( )
2015-08-20 22:53:48 +02:00
set_property ( DIRECTORY PROPERTY EP_BASE ${ EXTERNALS_PREFIX } )
if ( WIN32 )
set ( OPTION_OPENGL_HEADERS true CACHE BOOL "Download the OpenGL headers" )
endif ( WIN32 )
2021-09-17 00:02:02 +02:00
option ( OPTION_SDL2 "Download and Build SDL2" true )
cmake_dependent_option ( OPTION_SDL2_MIXER "Download and Build SDL2_Mixer" true "OPTION_SDL2" false )
2015-08-20 22:53:48 +02:00
option ( OPTION_OPENAL "Download and Build OpenAL" true )
option ( OPTION_PLIB "Download and Build PLIB" true )
cmake_dependent_option ( OPTION_PLIB_USE_HEAD "Download and Build PLIB from the latest revision" true "OPTION_PLIB" false )
option ( OPTION_JPEG "Download and Build libjpeg" true )
option ( OPTION_FREESOLID "Download and Build FreeSOLID" true )
option ( OPTION_ENET "Download and Build Enet" true )
option ( OPTION_OGG "Download and Build libogg" true )
option ( OPTION_VORBIS "Download and Build libvorbis" true )
option ( OPTION_EXPAT "Download and Build Expat" true )
option ( OPTION_ZLIB "Download and Build zlib" true )
option ( OPTION_PNG "Download and Build libpng" true )
2015-12-15 01:35:50 +01:00
option ( OPTION_SQLITE3 "Download and Build sqlite3" false )
2015-08-20 22:53:48 +02:00
option ( OPTION_FREETYPE "Download and Build FreeType" true )
option ( OPTION_CURL "Download and Build curl" true )
option ( OPTION_OSG "Download and Build OpenSceneGraph" true )
2022-09-25 21:02:31 +02:00
option ( OPTION_GLM "Download and install GLM math headers" false )
2020-11-26 03:37:54 +01:00
option ( OPTION_CACHED_ARCHIVES "Download from a defined cache" false )
set ( CACHED_URL "" CACHE STRING "Preferred url from which to download" )
if ( OPTION_CACHED_ARCHIVES )
2020-12-04 22:18:25 +01:00
set ( SDL2_URL "${CACHED_URL}/${SDL2_FILE}" )
2021-08-21 15:00:42 +02:00
set ( SDL2_MIXER_URL "${CACHED_URL}/${SDL2_MIXER_FILE}" )
2020-11-26 03:37:54 +01:00
set ( OPENAL_URL "${CACHED_URL}/${OPENAL_FILE}" )
set ( OPENAL_C11_URL "${CACHED_URL}/${OPENAL_C11_FILE}" )
set ( OPENAL_LEGACY_URL "${CACHED_URL}/${OPENAL_LEGACY_FILE}" )
set ( PLIB_HEAD_URL "${CACHED_URL}/${PLIB_HEAD_FILE}" )
set ( PLIB_URL "${CACHED_URL}/${PLIB_FILE}" )
set ( JPEG_URL "${CACHED_URL}/${JPEG_FILE}" )
set ( FREESOLID_URL "${CACHED_URL}/${FREESOLID_FILE}" )
2021-08-21 14:41:12 +02:00
set ( ENET_URL "${CACHED_URL}/${ENET_FILE}" )
2020-11-26 03:37:54 +01:00
set ( OGG_URL "${CACHED_URL}/${OGG_FILE}" )
set ( VORBIS_URL "${CACHED_URL}/${VORBIS_FILE}" )
set ( EXPAT_URL "${CACHED_URL}/${EXPAT_FILE}" )
set ( ZLIB_URL "${CACHED_URL}/${ZLIB_FILE}" )
set ( PNG_URL "${CACHED_URL}/${PNG_FILE}" )
set ( FREETYPE_URL "${CACHED_URL}/${FREETYPE_FILE}" )
2021-08-10 01:10:11 +02:00
set ( FREETYPE_LEGACY_URL "${CACHED_URL}/${FREETYPE_LEGACY_FILE}" )
2020-11-26 03:37:54 +01:00
set ( CURL_URL "${CACHED_URL}/${CURL_FILE}" )
set ( OSG_URL "${CACHED_URL}/${OSG_FILE}" )
2022-09-25 21:02:31 +02:00
set ( OPTION_GLM "${CACHED_URL}/${GLM_FILE}" )
2020-11-26 03:37:54 +01:00
set ( SQLITE3_URL "${CACHED_URL}/${SQLITE3_FILE}" )
endif ( )
2015-08-20 22:53:48 +02:00
# CMAKE_BUILD_TYPE does NOT work for Visual Studio or Xcode
# need to switch on configuration somehow
# or limit the choices
if ( CMAKE_BUILD_TYPE MATCHES "Debug" )
set ( SUPER_BUILD_POSTFIX "d" )
else ( )
set ( SUPER_BUILD_POSTFIX "" )
endif ( )
# OpenGL extensions (Windows only??)
message ( STATUS "OpenGL extensions (Windows only??)" )
if ( WIN32 AND OPTION_OPENGL_HEADERS )
2020-11-25 03:09:31 +01:00
ExternalProject_Add ( OpenGL-headers
U R L $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / p a t c h e s / o p e n g l h e a d e r s . z i p
2021-03-20 22:21:02 +01:00
U R L _ H A S H S H A 2 5 6 = 3 4 4 d e b e 6 e 6 5 6 2 9 d 7 0 0 2 0 b 6 d a 0 5 6 2 5 5 d e 5 6 c 7 d 4 f e 4 8 1 9 4 3 3 6 e a 2 c b 8 9 6 f c 1 b 5 4 5 b
2020-11-25 03:09:31 +01:00
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S } )
2015-08-20 22:53:48 +02:00
endif ( WIN32 AND OPTION_OPENGL_HEADERS )
# TODO - need to disable SDL2 static (it is overwritten by dll's SDL2.lib)
2015-12-15 03:28:20 +01:00
# message(WARNING "TODO - need to disable SDL2 static (it is overwritten by dll's SDL2.lib)")
2015-08-20 22:53:48 +02:00
2021-09-17 00:02:02 +02:00
if ( OPTION_SDL2 )
2018-11-14 06:58:11 +01:00
set ( SDL2_ARGS ${ EXTERNALS_CMAKE_ARGS } -DSDL_STATIC=Off -DSDL_CMAKE_DEBUG_POSTFIX= )
2020-06-25 22:14:32 +02:00
ExternalProject_Add ( ${ SDL2_PROJECT }
2020-12-04 22:18:25 +01:00
U R L $ { S D L 2 _ U R L }
U R L _ H A S H $ { S D L 2 _ H A S H }
2020-11-25 02:14:57 +01:00
C M A K E _ A R G S $ { S D L 2 _ A R G S }
2020-11-25 03:09:31 +01:00
D E P E N D S O p e n G L - h e a d e r s )
2021-09-17 00:02:02 +02:00
else ( OPTION_SDL2 )
2016-08-15 07:43:59 +02:00
set ( SDL2_PROJECT )
2021-09-17 00:02:02 +02:00
endif ( OPTION_SDL2 )
2015-08-20 22:53:48 +02:00
if ( OPTION_OPENAL )
2018-11-08 23:38:05 +01:00
if ( MSVC_VERSION LESS 1900 )
2020-11-25 02:14:57 +01:00
message ( WARNING "openal-soft versions newer than 1.18.2 need Visual Studio 2015" )
ExternalProject_Add ( ${ OPENAL_LEGACY_PROJECT }
U R L $ { O P E N A L _ L E G A C Y _ U R L }
U R L _ H A S H $ { O P E N A L _ L E G A C Y _ H A S H }
2022-01-30 18:21:40 +01:00
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S }
D E P E N D S $ { S D L 2 _ P R O J E C T } )
2020-11-25 02:14:57 +01:00
ExternalProject_Add_Step ( ${ OPENAL_LEGACY_PROJECT } openal_patch_cmake
2019-04-23 07:31:31 +02:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
2020-11-25 02:14:57 +01:00
" $ { C M A K E _ S O U R C E _ D I R } / p a t c h e s / $ { O P E N A L _ L E G A C Y _ P R O J E C T } . C M a k e L i s t s . t x t "
2019-04-23 07:31:31 +02:00
" < S O U R C E _ D I R > / C M a k e L i s t s . t x t "
D E P E N D E E S u p d a t e # do after update
2020-11-25 03:09:31 +01:00
D E P E N D E R S p a t c h ) # do before patch
2021-02-17 05:24:31 +01:00
elseif ( MSVC_VERSION LESS 1920 )
message ( WARNING "openal-soft versions newer than 1.19.1 need Visual Studio 2019 and CMAKE_SYSTEM_VERSION >= 10" )
2020-11-25 02:14:57 +01:00
ExternalProject_Add ( ${ OPENAL_C11_PROJECT }
U R L $ { O P E N A L _ C 1 1 _ U R L }
U R L _ H A S H $ { O P E N A L _ C 1 1 _ H A S H }
2022-01-30 18:21:40 +01:00
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S }
D E P E N D S $ { S D L 2 _ P R O J E C T } )
2020-11-13 18:48:49 +01:00
else ( )
if ( ${ CMAKE_SYSTEM_VERSION } VERSION_LESS "10.0" )
2021-02-17 05:24:31 +01:00
message ( WARNING "Version ${OPENAL_PROJECT_VERSION} of openal-soft is available for Visual Studio 2019 delete the cache and specify -D CMAKE_SYSTEM_VERSION=10.0 on the command line" )
2020-11-25 02:14:57 +01:00
ExternalProject_Add ( ${ OPENAL_C11_PROJECT }
U R L $ { O P E N A L _ C 1 1 _ U R L }
U R L _ H A S H $ { O P E N A L _ C 1 1 _ H A S H }
2022-01-30 18:21:40 +01:00
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S }
D E P E N D S $ { S D L 2 _ P R O J E C T } )
2020-11-13 18:48:49 +01:00
else ( )
2020-11-25 02:14:57 +01:00
ExternalProject_Add ( ${ OPENAL_PROJECT }
U R L $ { O P E N A L _ U R L }
U R L _ H A S H $ { O P E N A L _ H A S H }
2022-11-06 17:30:36 +01:00
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S }
D E P E N D S $ { S D L 2 _ P R O J E C T } )
2020-11-13 18:48:49 +01:00
endif ( )
endif ( )
2015-08-20 22:53:48 +02:00
endif ( OPTION_OPENAL )
if ( OPTION_PLIB )
if ( OPTION_PLIB_USE_HEAD )
2020-11-26 03:37:54 +01:00
if ( NOT OPTION_CACHED_ARCHIVES )
ExternalProject_Add ( ${ PLIB_HEAD_PROJECT }
S V N _ R E P O S I T O R Y $ { P L I B _ S V N _ R E P O } #svn://svn.code.sf.net/p/plib/code/trunk
S V N _ R E V I S I O N - r $ { P L I B _ S V N _ R E V I S I O N } #-r2173 as of 2012-08-24 can also use -rHEAD, but specific revision is supposed to prevent calling svn update
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S }
D E P E N D S O p e n G L - h e a d e r s )
ExternalProject_Add_Step ( ${ PLIB_HEAD_PROJECT } plib_add_cmake
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
" $ { C M A K E _ S O U R C E _ D I R } / p a t c h e s / $ { P L I B _ P R O J E C T } . C M a k e L i s t s . t x t "
" < S O U R C E _ D I R > / C M a k e L i s t s . t x t "
D E P E N D E E S u p d a t e # do after update
D E P E N D E R S p a t c h ) # do before patch
else ( )
# this archive corresponds to revision 2173
2020-11-26 04:14:19 +01:00
ExternalProject_Add ( ${ PLIB_HEAD_PROJECT }
2020-11-26 03:37:54 +01:00
U R L $ { P L I B _ H E A D _ U R L }
2020-11-26 04:14:19 +01:00
U R L _ H A S H $ { P L I B _ H E A D _ H A S H }
2020-11-26 03:37:54 +01:00
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S }
D E P E N D S O p e n G L - h e a d e r s )
2020-11-26 04:14:19 +01:00
ExternalProject_Add_Step ( ${ PLIB_HEAD_PROJECT } plib_add_cmake
2020-11-26 03:37:54 +01:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
" $ { C M A K E _ S O U R C E _ D I R } / p a t c h e s / $ { P L I B _ P R O J E C T } . C M a k e L i s t s . t x t "
" < S O U R C E _ D I R > / C M a k e L i s t s . t x t "
D E P E N D E E S u p d a t e # do after update
D E P E N D E R S p a t c h ) # do before patch
endif ( )
2015-08-20 22:53:48 +02:00
else ( OPTION_PLIB_USE_HEAD )
2020-11-26 03:37:54 +01:00
# this archive corresponds to revision 2131
2020-11-25 03:09:31 +01:00
ExternalProject_Add ( ${ PLIB_PROJECT }
U R L $ { P L I B _ U R L }
U R L _ H A S H $ { P L I B _ H A S H }
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S }
D E P E N D S O p e n G L - h e a d e r s )
2020-11-25 02:14:57 +01:00
ExternalProject_Add_Step ( ${ PLIB_PROJECT } plib_add_cmake
2020-11-25 03:09:31 +01:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
" $ { C M A K E _ S O U R C E _ D I R } / p a t c h e s / $ { P L I B _ P R O J E C T } . C M a k e L i s t s . t x t "
" < S O U R C E _ D I R > / C M a k e L i s t s . t x t "
D E P E N D E E S u p d a t e # do after update
D E P E N D E R S p a t c h ) # do before patch
2015-08-20 22:53:48 +02:00
endif ( OPTION_PLIB_USE_HEAD )
endif ( OPTION_PLIB )
if ( OPTION_JPEG )
2021-04-26 16:30:55 +02:00
#set(JPEG_PROJECT jpeg-9d)
2020-11-25 02:14:57 +01:00
ExternalProject_Add ( ${ JPEG_PROJECT }
U R L $ { J P E G _ U R L }
U R L _ H A S H $ { J P E G _ H A S H }
2020-11-25 03:09:31 +01:00
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S } )
2020-11-25 02:14:57 +01:00
ExternalProject_Add_Step ( ${ JPEG_PROJECT } jpeg_add_cmake
2020-11-25 03:09:31 +01:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
" $ { C M A K E _ S O U R C E _ D I R } / p a t c h e s / $ { J P E G _ P R O J E C T } . C M a k e L i s t s . t x t "
" < S O U R C E _ D I R > / C M a k e L i s t s . t x t "
D E P E N D E E S u p d a t e # do after update
D E P E N D E R S p a t c h ) # do before patch
2020-11-25 02:14:57 +01:00
ExternalProject_Add_Step ( ${ JPEG_PROJECT } jpeg_config
2020-11-25 03:09:31 +01:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
" < S O U R C E _ D I R > / j c o n f i g . v c "
" < S O U R C E _ D I R > / j c o n f i g . h "
D E P E N D E E S u p d a t e # do after update
D E P E N D E R S p a t c h ) # do before patch
2016-08-15 02:46:47 +02:00
else ( OPTION_JPEG )
2021-04-26 16:30:55 +02:00
set ( JPEG_PROJECT )
2015-08-20 22:53:48 +02:00
endif ( OPTION_JPEG )
if ( OPTION_FREESOLID )
2020-11-25 03:09:31 +01:00
set ( FreeSOLID_ARGS ${ EXTERNALS_CMAKE_ARGS } -D'CMAKE_DEBUG_POSTFIX= "" ' )
ExternalProject_Add ( ${ FREESOLID_PROJECT }
D O W N L O A D _ N A M E $ { F R E E S O L I D _ F I L E }
U R L $ { F R E E S O L I D _ U R L }
U R L _ H A S H $ { F R E E S O L I D _ H A S H }
C M A K E _ A R G S $ { F r e e S O L I D _ A R G S } )
ExternalProject_Add_Step ( ${ FREESOLID_PROJECT } freesolid_add_cmake
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
" $ { C M A K E _ S O U R C E _ D I R } / p a t c h e s / $ { F R E E S O L I D _ P R O J E C T } . C M a k e L i s t s . t x t "
" < S O U R C E _ D I R > / C M a k e L i s t s . t x t "
D E P E N D E E S u p d a t e # do after update
D E P E N D E R S p a t c h ) # do before patch
2015-08-20 22:53:48 +02:00
endif ( OPTION_FREESOLID )
if ( OPTION_ENET )
2019-02-07 03:03:49 +01:00
ExternalProject_Add ( ${ ENET_PROJECT }
2020-11-25 02:14:57 +01:00
U R L $ { E N E T _ U R L }
U R L _ H A S H $ { E N E T _ H A S H }
2020-11-25 03:09:31 +01:00
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S } )
2019-02-07 03:03:49 +01:00
ExternalProject_Add_Step ( ${ ENET_PROJECT } enet_add_cmake
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
2020-11-25 02:14:57 +01:00
" $ { C M A K E _ S O U R C E _ D I R } / p a t c h e s / $ { E N E T _ P R O J E C T } . C M a k e L i s t s . t x t "
2019-02-07 03:03:49 +01:00
" < S O U R C E _ D I R > / C M a k e L i s t s . t x t "
D E P E N D E E S u p d a t e # do after update
2020-11-25 03:09:31 +01:00
D E P E N D E R S p a t c h ) # do before patch
2019-02-07 03:03:49 +01:00
else ( OPTION_ENET )
set ( ENET_PROJECT )
2015-08-20 22:53:48 +02:00
endif ( OPTION_ENET )
if ( OPTION_OGG )
2020-06-25 22:14:32 +02:00
set ( OGG_ARGS ${ EXTERNALS_CMAKE_ARGS } -DBUILD_SHARED_LIBS=on -DBUILD_TESTING=off -DINSTALL_DOCS=off )
2019-09-08 06:16:48 +02:00
ExternalProject_Add ( ${ OGG_PROJECT }
2020-11-25 02:14:57 +01:00
U R L $ { O G G _ U R L }
U R L _ H A S H $ { O G G _ H A S H }
2020-11-25 03:09:31 +01:00
C M A K E _ A R G S $ { O G G _ A R G S } )
2019-09-08 06:16:48 +02:00
else ( OPTION_OGG )
set ( OGG_PROJECT )
2015-08-20 22:53:48 +02:00
endif ( OPTION_OGG )
if ( OPTION_VORBIS )
2020-07-11 18:16:04 +02:00
set ( VORBIS_ARGS ${ EXTERNALS_CMAKE_ARGS } -DBUILD_SHARED_LIBS=on )
ExternalProject_Add ( ${ VORBIS_PROJECT }
2020-11-25 02:14:57 +01:00
U R L $ { V O R B I S _ U R L }
U R L _ H A S H $ { V O R B I S _ H A S H }
2020-07-11 18:16:04 +02:00
C M A K E _ A R G S $ { V O R B I S _ A R G S }
2020-11-25 03:09:31 +01:00
D E P E N D S $ { O G G _ P R O J E C T } )
2020-07-11 18:16:04 +02:00
else ( OPTION_VORBIS )
set ( VORBIS_PROJECT )
2015-08-20 22:53:48 +02:00
endif ( OPTION_VORBIS )
2021-08-21 15:00:42 +02:00
if ( OPTION_SDL2_MIXER )
2022-07-15 19:42:26 +02:00
set ( SDL2_MIXER_ARGS ${ EXTERNALS_CMAKE_ARGS } -DSDL2MIXER_DEBUG_POSTFIX:STRING=''
- D S D L 2 M I X E R _ V E N D O R E D : B O O L = O F F
- D S D L 2 M I X E R _ S A M P L E S : B O O L = O F F
- D S D L 2 M I X E R _ O P U S : B O O L = O F F
- D S D L 2 M I X E R _ F L A C : B O O L = O F F
- D S D L 2 M I X E R _ M O D : B O O L = O F F
- D S D L 2 M I X E R _ M I D I _ F L U I D S Y N T H : B O O L = O F F )
2021-08-21 15:00:42 +02:00
ExternalProject_Add ( ${ SDL2_MIXER_PROJECT }
U R L $ { S D L 2 _ M I X E R _ U R L }
2021-08-31 04:31:07 +02:00
U R L _ H A S H $ { S D L 2 _ M I X E R _ H A S H }
2021-08-21 15:00:42 +02:00
C M A K E _ A R G S $ { S D L 2 _ M I X E R _ A R G S }
D E P E N D S $ { S D L 2 _ P R O J E C T } $ { V O R B I S _ P R O J E C T } $ { O G G _ P R O J E C T } )
else ( OPTION_SDL2_MIXER )
set ( SDL2_MIXER_PROJECT )
endif ( OPTION_SDL2_MIXER )
2018-11-08 23:38:05 +01:00
if ( OPTION_EXPAT )
2021-04-08 04:04:25 +02:00
if ( MSVC_VERSION GREATER 1900 )
#disable building unneeded sub projects
2022-09-26 00:33:27 +02:00
set ( EXPAT_ARGS ${ EXTERNALS_CMAKE_ARGS } -DEXPAT_BUILD_TESTS=off
- D E X P A T _ B U I L D _ E X A M P L E S = o f f
- D E X P A T _ B U I L D _ T O O L S = o f f
- D C M A K E _ D E B U G _ P O S T F I X = ' '
- D E X P A T _ D E B U G _ P O S T F I X = ' ' )
2021-04-08 04:04:25 +02:00
ExternalProject_Add ( ${ EXPAT_PROJECT }
D O W N L O A D _ N A M E $ { E X P A T _ F I L E }
U R L $ { E X P A T _ U R L }
U R L _ H A S H $ { E X P A T _ H A S H }
C M A K E _ A R G S $ { E X P A T _ A R G S } )
else ( )
message ( WARNING "expat versions newer than 2.2.10 need Visual Studio 2017" )
2021-08-10 01:10:11 +02:00
message ( WARNING "expat no longer officially supports Visual Studio 2015 and older" )
2021-04-08 04:04:25 +02:00
#disable building unneeded sub projects (they failed with VS2008)
set ( EXPAT_LEGACY_ARGS ${ EXTERNALS_CMAKE_ARGS } -DEXPAT_BUILD_TESTS=off -DEXPAT_BUILD_EXAMPLES=off -DEXPAT_BUILD_TOOLS=off -DCMAKE_DEBUG_POSTFIX='' )
ExternalProject_Add ( ${ EXPAT_LEGACY_PROJECT }
D O W N L O A D _ N A M E $ { E X P A T _ L E G A C Y _ F I L E }
U R L $ { E X P A T _ L E G A C Y _ U R L }
U R L _ H A S H $ { E X P A T _ L E G A C Y _ H A S H }
C M A K E _ A R G S $ { E X P A T _ L E G A C Y _ A R G S } )
endif ( )
2019-06-21 22:31:27 +02:00
else ( OPTION_EXPAT )
set ( EXPAT_PROJECT )
2015-08-20 22:53:48 +02:00
endif ( OPTION_EXPAT )
if ( OPTION_ZLIB )
2020-06-25 22:14:32 +02:00
ExternalProject_Add ( ${ ZLIB_PROJECT }
2020-11-25 03:09:31 +01:00
D O W N L O A D _ N A M E $ { Z L I B _ F I L E }
U R L $ { Z L I B _ U R L }
U R L _ H A S H $ { Z L I B _ H A S H }
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S }
P A T C H _ C O M M A N D $ { C M A K E _ C O M M A N D } - E r e m o v e - f < S O U R C E _ D I R > / z c o n f . h )
ExternalProject_Add_Step ( ${ ZLIB_PROJECT } sd_zlib_remove_dll
C O M M A N D " $ { C M A K E _ C O M M A N D } " - E r e m o v e - f $ { E X T E R N A L S _ I N S T A L L _ D I R } / b i n / z l i b $ { S U P E R _ B U I L D _ P O S T F I X } . d l l
D E P E N D E E S i n s t a l l )
ExternalProject_Add_Step ( ${ ZLIB_PROJECT } sd_zlib_remove_lib
C O M M A N D " $ { C M A K E _ C O M M A N D } " - E r e m o v e - f $ { E X T E R N A L S _ I N S T A L L _ D I R } / l i b / z l i b $ { S U P E R _ B U I L D _ P O S T F I X } . l i b
D E P E N D E E S s d _ z l i b _ r e m o v e _ d l l )
ExternalProject_Add_Step ( ${ ZLIB_PROJECT } sd_zlib_rename_lib
C O M M A N D " $ { C M A K E _ C O M M A N D } " - E r e n a m e $ { E X T E R N A L S _ I N S T A L L _ D I R } / l i b / z l i b s t a t i c $ { S U P E R _ B U I L D _ P O S T F I X } . l i b $ { E X T E R N A L S _ I N S T A L L _ D I R } / l i b / z l i b . l i b
D E P E N D E E S s d _ z l i b _ r e m o v e _ l i b )
2018-11-08 23:38:05 +01:00
else ( OPTION_ZLIB )
set ( ZLIB_PROJECT )
2015-08-20 22:53:48 +02:00
endif ( OPTION_ZLIB )
if ( OPTION_PNG )
2015-12-15 03:28:20 +01:00
set ( PNG_ARGS ${ EXTERNALS_CMAKE_ARGS } -DPNG_SHARED=off -DPNG_TESTS=off -DCMAKE_DEBUG_POSTFIX='' )
2020-06-25 22:14:32 +02:00
ExternalProject_Add ( ${ PNG_PROJECT }
2020-11-25 02:14:57 +01:00
D O W N L O A D _ N A M E $ { P N G _ F I L E }
U R L $ { P N G _ U R L }
U R L _ H A S H $ { P N G _ H A S H }
2015-12-15 03:28:20 +01:00
C M A K E _ A R G S $ { P N G _ A R G S }
2020-11-25 03:09:31 +01:00
D E P E N D S $ { Z L I B _ P R O J E C T } )
2015-12-15 03:28:20 +01:00
ExternalProject_Add_Step ( ${ PNG_PROJECT } sd_libpng_rename
2020-11-25 03:09:31 +01:00
C O M M A N D " $ { C M A K E _ C O M M A N D } " - E r e n a m e $ { E X T E R N A L S _ I N S T A L L _ D I R } / l i b / l i b p n g 1 6 _ s t a t i c $ { S U P E R _ B U I L D _ P O S T F I X } . l i b $ { E X T E R N A L S _ I N S T A L L _ D I R } / l i b / l i b p n g . l i b
D E P E N D E E S i n s t a l l )
2015-12-15 03:28:20 +01:00
else ( OPTION_PNG )
2016-08-15 05:05:13 +02:00
set ( PNG_PROJECT )
2015-08-20 22:53:48 +02:00
endif ( OPTION_PNG )
if ( OPTION_SQLITE3 )
# may only be needed for Simon's replay stuff
2020-11-25 03:09:31 +01:00
ExternalProject_Add ( ${ SQLITE3_PROJECT }
2020-11-25 02:14:57 +01:00
U R L $ { S Q L I T E 3 _ U R L }
U R L _ H A S H $ { S Q L I T E 3 _ H A S H }
2020-11-25 03:09:31 +01:00
C M A K E _ A R G S $ { E X T E R N A L S _ C M A K E _ A R G S } )
2020-11-25 02:14:57 +01:00
ExternalProject_Add_Step ( ${ SQLITE3_PROJECT } sqlite3_add_cmake
2020-06-25 22:14:32 +02:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
2019-12-13 06:49:05 +01:00
" $ { C M A K E _ S O U R C E _ D I R } / p a t c h e s / s q l i t e 3 - C M a k e L i s t s . t x t "
" < S O U R C E _ D I R > / C M a k e L i s t s . t x t "
2020-06-25 22:14:32 +02:00
D E P E N D E E S u p d a t e # do after update
2020-11-25 03:09:31 +01:00
D E P E N D E R S p a t c h ) # do before patch
2020-11-25 02:14:57 +01:00
else ( OPTION_SQLITE3 )
set ( SQLITE3_PROJECT )
2015-08-20 22:53:48 +02:00
endif ( OPTION_SQLITE3 )
# ========== For OpenSceneGraph =============
if ( OPTION_FREETYPE )
2021-08-10 01:10:11 +02:00
if ( MSVC_VERSION GREATER 1700 ) # Greater than vs2012
# Set FREETYPE_LEGACY_PROJECT to empty string, because we will use FREETYPE_PROJECT,
# OpenScenegraph DEPENDS on freetype, so only one can be defined
set ( FREETYPE_LEGACY_PROJECT )
set ( FREETYPE_ARGS ${ EXTERNALS_CMAKE_ARGS } -DBUILD_SHARED_LIBS:BOOL=false
- D D I S A B L E _ F O R C E _ D E B U G _ P O S T F I X : B O O L = t r u e
- D C M A K E _ D I S A B L E _ F I N D _ P A C K A G E _ B Z i p 2 = T R U E
- D C M A K E _ D I S A B L E _ F I N D _ P A C K A G E _ H a r f B u z z = T R U E
- D C M A K E _ D I S A B L E _ F I N D _ P A C K A G E _ P N G = T R U E
- D C M A K E _ D I S A B L E _ F I N D _ P A C K A G E _ Z L I B = T R U E
- D C M A K E _ D I S A B L E _ F I N D _ P A C K A G E _ B r o t l i D e c = T R U E )
ExternalProject_Add ( ${ FREETYPE_PROJECT }
U R L $ { F R E E T Y P E _ U R L }
U R L _ H A S H $ { F R E E T Y P E _ H A S H }
C M A K E _ A R G S $ { F R E E T Y P E _ A R G S }
D E P E N D S $ { Z L I B _ P R O J E C T } $ { P N G _ P R O J E C T } )
else ( )
# Set FREETYPE_PROJECT to empty string, because we will use FREETYPE_LEGACY_PROJECT,
# OpenScenegraph DEPENDS on freetype, so only one can be defined
set ( FREETYPE_PROJECT )
message ( WARNING "freetype versions newer than 2.10.4 need Visual Studio 2013 or newer" )
set ( FREETYPE_LEGACY_ARGS ${ EXTERNALS_CMAKE_ARGS } -DBUILD_SHARED_LIBS:BOOL=false
- D D I S A B L E _ F O R C E _ D E B U G _ P O S T F I X : B O O L = t r u e
- D C M A K E _ D I S A B L E _ F I N D _ P A C K A G E _ B Z i p 2 = T R U E
- D C M A K E _ D I S A B L E _ F I N D _ P A C K A G E _ H a r f B u z z = T R U E
- D C M A K E _ D I S A B L E _ F I N D _ P A C K A G E _ P N G = T R U E
- D C M A K E _ D I S A B L E _ F I N D _ P A C K A G E _ Z L I B = T R U E
- D C M A K E _ D I S A B L E _ F I N D _ P A C K A G E _ B r o t l i D e c = T R U E )
ExternalProject_Add ( ${ FREETYPE_LEGACY_PROJECT }
U R L $ { F R E E T Y P E _ L E G A C Y _ U R L }
U R L _ H A S H $ { F R E E T Y P E _ L E G A C Y _ H A S H }
C M A K E _ A R G S $ { F R E E T Y P E _ L E G A C Y _ A R G S }
D E P E N D S $ { Z L I B _ P R O J E C T } $ { P N G _ P R O J E C T } )
endif ( )
2016-08-15 15:59:18 +02:00
else ( OPTION_FREETYPE )
set ( FREETYPE_PROJECT )
2021-08-10 01:10:11 +02:00
set ( FREETYPE_LEGACY_PROJECT )
2015-08-20 22:53:48 +02:00
endif ( OPTION_FREETYPE )
if ( OPTION_CURL )
2022-04-20 16:10:06 +02:00
set ( CURL_ARGS ${ EXTERNALS_CMAKE_ARGS } -DBUILD_TESTING=Off -DCMAKE_DEBUG_POSTFIX= -DCURL_USE_SCHANNEL=On -DCURL_WINDOWS_SSPI=On )
2016-08-15 10:14:21 +02:00
ExternalProject_Add ( ${ CURL_PROJECT }
2020-11-25 02:14:57 +01:00
U R L $ { C U R L _ U R L }
U R L _ H A S H $ { C U R L _ H A S H }
2020-06-25 22:14:32 +02:00
C M A K E _ A R G S $ { C U R L _ A R G S }
2020-11-25 03:09:31 +01:00
D E P E N D S $ { Z L I B _ P R O J E C T } )
2016-08-15 10:14:21 +02:00
else ( OPTION_CURL )
set ( CURL_PROJECT )
2015-08-20 22:53:48 +02:00
endif ( OPTION_CURL )
if ( OPTION_OSG )
2022-01-18 21:53:43 +01:00
set ( OSG_ARGS ${ EXTERNALS_CMAKE_ARGS } -DCMAKE_DEBUG_POSTFIX=''
- D U S E _ 3 R D P A R T Y _ B I N = O f f
- D B U I L D _ O S G _ D E P R E C A T E D _ S E R I A L I Z E R S = O F F
- D B U I L D _ O S G _ A P P L I C A T I O N S = O F F
- D B U I L D _ O S G _ P L U G I N S _ B Y _ D E F A U L T = O F F
- D B U I L D _ O S G _ P L U G I N _ O S G = O N
- D B U I L D _ O S G _ P L U G I N _ A C = O N
- D B U I L D _ O S G _ P L U G I N _ C U R L = O N
- D B U I L D _ O S G _ P L U G I N _ D D S = O N
- D B U I L D _ O S G _ P L U G I N _ F R E E T Y P E = O N
- D B U I L D _ O S G _ P L U G I N _ G L S L = O N
- D B U I L D _ O S G _ P L U G I N _ I V E = O N
- D B U I L D _ O S G _ P L U G I N _ J P E G = O N
- D B U I L D _ O S G _ P L U G I N _ O S G = O N
- D B U I L D _ O S G _ P L U G I N _ O S G A = O N
- D B U I L D _ O S G _ P L U G I N _ O S G T G Z = O N
- D B U I L D _ O S G _ P L U G I N _ P N G = O N
- D B U I L D _ O S G _ P L U G I N _ R G B = O N
- D B U I L D _ O S G _ P L U G I N _ S H A D O W = O N )
2015-08-20 22:53:48 +02:00
2020-11-25 02:14:57 +01:00
ExternalProject_Add ( ${ OSG_PROJECT }
U R L $ { O S G _ U R L }
U R L _ H A S H $ { O S G _ H A S H }
2020-06-25 22:14:32 +02:00
C M A K E _ A R G S $ { O S G _ A R G S }
2021-09-17 00:02:02 +02:00
D E P E N D S $ { Z L I B _ P R O J E C T } $ { C U R L _ P R O J E C T } $ { F R E E T Y P E _ P R O J E C T } $ { F R E E T Y P E _ L E G A C Y _ P R O J E C T } O p e n G L - h e a d e r s $ { J P E G _ P R O J E C T } $ { P N G _ P R O J E C T } $ { S D L 2 _ P R O J E C T } )
2015-08-20 22:53:48 +02:00
endif ( OPTION_OSG )
2022-09-25 21:02:31 +02:00
if ( OPTION_GLM )
set ( GLM_ARGS ${ EXTERNALS_CMAKE_ARGS } -DCMAKE_DEBUG_POSTFIX=''
- D B U I L D _ S T A T I C _ L I B S = t r u e
)
ExternalProject_Add ( ${ GLM_PROJECT }
U R L $ { G L M _ U R L }
U R L _ H A S H $ { G L M _ H A S H }
C M A K E _ A R G S $ { G L M _ A R G S }
)
ExternalProject_Add_Step ( ${ GLM_PROJECT } glm_add_cmake_install
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
" $ { C M A K E _ S O U R C E _ D I R } / p a t c h e s / g l m - 0 . 9 . 9 . 8 . C M a k e L i s t s . t x t "
" < S O U R C E _ D I R > / C M a k e L i s t s . t x t "
D E P E N D E E S u p d a t e # do after update
D E P E N D E R S p a t c h ) # do before patch
else ( OPTION_GLM )
set ( GLM_PROJECT )
endif ( OPTION_GLM )
2015-08-20 22:53:48 +02:00
# no-output target, for having some files available in IDEs.
2015-12-15 01:35:50 +01:00
set ( DOCSOURCES COPYING LICENSE readme.txt )
2015-08-20 22:53:48 +02:00
add_custom_target ( rootdoc SOURCES ${ DOCSOURCES } )
2019-01-30 03:20:05 +01:00
file ( GLOB_RECURSE _INFO_FILES "${EXTERNALS_PREFIX}/Stamp/*info.txt" )
# ========== Installation =============
install ( FILES ${ _INFO_FILES } DESTINATION ${ EXTERNALS_INSTALL_DIR } /source_info )
2018-11-29 00:08:54 +01:00
install ( FILES ${ DOCSOURCES } DESTINATION ${ EXTERNALS_INSTALL_DIR } )
install ( DIRECTORY Licenses/ DESTINATION ${ EXTERNALS_INSTALL_DIR } /Licenses )
2015-08-20 22:53:48 +02:00
2019-01-30 03:20:05 +01:00
install ( DIRECTORY ${ EXTERNALS_INSTALL_DIR } DESTINATION . )
2015-08-20 22:53:48 +02:00
# ========== Packaging =============
2015-12-15 03:36:10 +01:00
if ( MSVC )
2020-12-02 17:40:17 +01:00
string ( MAKE_C_IDENTIFIER ${ CMAKE_GENERATOR } _TMP_NAME )
string ( FIND ${ _TMP_NAME } "_" _INDEX REVERSE )
MATH ( EXPR _INDEX "${_INDEX}+1" )
string ( SUBSTRING ${ _TMP_NAME } ${ _INDEX } -1 _VSYEAR )
# This is now preferrred way to check 32 vs 64 bit
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set ( SD_PACKAGE_FILE_NAME ${ PROJECT_NAME } - ${ PROJECT_VERSION } -vs ${ _VSYEAR } -win64 )
else ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set ( SD_PACKAGE_FILE_NAME ${ PROJECT_NAME } - ${ PROJECT_VERSION } -vs ${ _VSYEAR } -win32 )
endif ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
2015-12-15 03:36:10 +01:00
else ( MSVC )
2020-12-02 17:40:17 +01:00
set ( SD_PACKAGE_FILE_NAME ${ PROJECT_NAME } - ${ PROJECT_VERSION } - ${ CMAKE_C_COMPILER_ID } - ${ CMAKE_C_COMPILER_VERSION } )
2015-12-15 03:36:10 +01:00
endif ( MSVC )
2020-12-02 17:40:17 +01:00
# If this is NOT a Release build, append the build type to the filename
string ( TOLOWER "${CMAKE_BUILD_TYPE}" _CMAKE_BUILD_TYPE_LOWCASE )
if ( NOT _CMAKE_BUILD_TYPE_LOWCASE STREQUAL "release" )
set ( SD_PACKAGE_FILE_NAME ${ SD_PACKAGE_FILE_NAME } - ${ CMAKE_BUILD_TYPE } )
endif ( )
#set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF)
2015-08-20 22:53:48 +02:00
set ( CPACK_PACKAGE_FILE_NAME ${ SD_PACKAGE_FILE_NAME } CACHE STRING "" )
2020-12-02 17:40:17 +01:00
message ( STATUS "CPACK_PACKAGE_FILE_NAME = ${CPACK_PACKAGE_FILE_NAME}" )
2015-08-20 22:53:48 +02:00
set ( CPACK_GENERATOR "ZIP" )
include ( CPack )