Commit Graph

253 Commits

Author SHA1 Message Date
Chris Thrasher
5fde1ca613 Hide symbols in cross platform manner 2022-05-21 21:35:35 +02:00
Chris Thrasher
3301c47755 Remove CompileOptionsOverride
These overrides existed to prevent MSVC errors related to duplicate
compiler warnings. Because we required a version of CMake older
3.15, CMake would add /W3 as a default compiler flag when using
MSVC. We then add /W4 in addition to that. Modern CMake versions
seem to deduplicate these warnings but older versions did not.

The easist fix is to raise the minimum CMake version to 3.15 which
changes the default behavior to no longer add /W3 without being
explicitly specified. See the below link for more information about
this behavior change.

https://cmake.org/cmake/help/latest/policy/CMP0092.html
2022-05-09 15:38:39 +02:00
Chris Thrasher
2a5ce3c989 Apply compiler warnings to tests 2022-05-02 08:39:02 +02:00
Chris Thrasher
8a4563361f Set compiler warnings on a per-target, not per-file basis
No 1st party SFML targets contain 3rd party source code so it's
safe and correct to apply warnings to the entire target.
2022-05-02 08:39:02 +02:00
Lukas Dürrenberger
9a6142bd22 Merge branch '2.6.x' 2022-04-27 08:12:25 +02:00
Radek Dutkiewicz
b6ca47e128 DRM Implementation
Ported sfml-pi DRM/KMS backend written by @mickelson 
Port co-authored by @substring

Co-authored-by: Andrew Mickelson <andrew.mickelson@gmail.com>
Co-authored-by: Gil Delescluse <frog2wah@gmail.com>
2022-04-26 07:44:14 +02:00
Chris Thrasher
4b93727413 Enable MSVC standards conformance 2022-04-19 08:33:27 +02:00
friendlyanon
9b3735c05f Honor OPTIONAL_COMPONENTS when finding SFML
The "main" component is not available everywhere, but passing it to the
find_package(SFML) call via the OPTIONAL_COMPONENTS still fails the call
on platforms like Linux.

This commit enables SFML to be used the same in a cross-platform fashion
without forcing consumers to put custom logic around importing SFML.
Example that works with this commit, but break before:

    find_package(SFML REQUIRED graphics OPTIONAL_COMPONENTS main)
    target_link_libraries(dummy PRIVATE SFML::graphics)
    if(SFML_MAIN_FOUND)
      target_link_libraries(dummy PRIVATE SFML::main)
    endif()
2022-03-29 00:30:04 +02:00
Chris Thrasher
a733e4cd7e Remove unused CMake variables 2022-02-17 23:24:02 +01:00
Chris Thrasher
5236513f16 Simplify how tests are built 2022-02-16 13:51:29 +00:00
binary1248
66339bc09c Added support for coverage reporting. 2022-02-10 08:08:47 +01:00
Chris Thrasher
8f1955af17 Don't add SFML:: namespace to external targets
The SFML target export set includes a number of external targets
which are not owned by the project itself. This includes targets
like Freetype and OpenGL. By specifying a namespace for the export
set, a SFML:: namespace was prepended to all targets. This is not
a problem when using shared libraries but when building and using
static libraries caused a problem where CMake was attempting and
failing to find targets with names like SFML::Freetype or
SFML::OpenGL which did not exist.

Luckily CMake allows you put namespaces in the EXPORT_NAME target
property so now we can just add the SFML:: namespace in the macro
which creates SFML targets and remove the `NAMESPACE SFML::` line
which was adding namespaces to all targets.
2022-01-28 08:11:53 +01:00
Chris Thrasher
a322d18e63 Use built-in CMake project version functionality 2022-01-21 21:09:20 +01:00
Chris Thrasher
4586db91a9 Add SFML:: namespace to targets
This removes the sfml- prefixed targets from the export set. The sfml-
prefixed targets are still available within the build tree but not to
downstream users thus making this an API breaking change when compared
to the 2.x releases. To keep things consistent, usage of the sfml-
targets were replaced with their namespaced counterparts.

This has a number of benefits:

  1. It's more idiomatic. Modern CMake libraries are expected to
     have namespaced targets.

  2. Namespaced targets are less likely to collide with user-defined
     targets. No one will accidentally define a SFML:: target.

  3. If a namespaced target is not found by CMake, configuration
     will immediately stop.
2022-01-11 22:27:39 +01:00
Lukas Dürrenberger
3a402f241a Merge branch '2.6.x' into feature/back_merge 2022-01-08 12:28:34 +01:00
Chris Thrasher
ff4fc05b18 Stop configuration when GCC is detected on macOS 2022-01-02 23:15:05 +01:00
Chris Thrasher
dafdacfa20 Let tests and examples inherit language requirement from upstream targets
It's not necessary to re-specify cxx_std_17 since any example or test
which depends on a core target (which should be all of them) will pick
up this language requirement that should be a public property of those
targets. If that changes, these examples and tests will possibly fail
to compile and correctly catch the bug that was introduced in the core
library targets.
2021-12-28 15:53:08 +01:00
Vittorio Romeo
46639ed277 Manipulate library names on Windows + Clang 2021-12-22 08:53:03 +01:00
Lukas Dürrenberger
3cd45a283b Merge branch '2.6.x' into feature/backmerge 2021-12-20 13:44:56 +01:00
Pawel Paruzel
c824d3d57a Fix all macOS clang warnings
Co-authored-by: binary1248 <binary1248@hotmail.com>
2021-12-20 00:10:55 +01:00
Pawel Paruzel
aae00e9002 Fix cmake -DWARNINGS_AS_ERRORS=1 for clang 2021-12-20 00:10:55 +01:00
Vittorio Romeo
4a189d6602 Remove build logic for unsupported compilers 2021-12-19 21:51:53 +01:00
Vittorio Romeo
d12a2cd319 Use 'override' whenever possible instead of 'virtual' 2021-12-09 09:07:03 +01:00
Vittorio Romeo
9a0cc4b7dc Use alias declarations instead of 'typedef' 2021-12-08 17:58:13 +00:00
Vittorio Romeo
dd14d7c57f Use '[[fallthrough]]' attribute and enable relevant warning 2021-12-04 12:42:09 +01:00
Vittorio Romeo
bd12438916 Enable and require C++17 support for all targets 2021-12-02 20:13:04 +01:00
Lukas Dürrenberger
1aa2b7cd0d Update SFML version to 3.0.0
Unlike with SFML 2.x and earlier the version numbers are updated as soon
as work on the new release starts. This especially helps with version
checks, which until now caused issues with in-development version
matching the previous release.
2021-12-02 20:02:15 +01:00
Vittorio Romeo
6cf124db66 Fix remaining warnings
- Fixes in examples
- Fixes across all the modules
2021-11-30 11:25:58 +01:00
Lukas Dürrenberger
01836ccea4 Fix conversion warnings for the Graphics module
- Fix conversion and shadowing warnings
- Add SYSTEM indicator for stb_*, FreeType and other headers
2021-11-30 11:25:58 +01:00
binary1248
a759ccd5db Enable compiler warnings. 2021-11-30 11:25:58 +01:00
Chris Ohk
eeeda74ec1 Add support for Visual Studio 2022
- References: https://cmake.org/cmake/help/latest/generator/Visual%20Studio%2017%202022.html
2021-08-23 22:34:04 +02:00
Lukas Dürrenberger
9e27096c37 Fix configuration conflicts with Clang
- On Windows you can use Clang with both MSVC and MinGW
- When using Clang with MSVC all the MSVC conditions should be fulfilled
- When using Clang with MinGW all the MSVC steps should not be run
2021-05-10 12:20:48 +02:00
Marty E. Plummer
6ad96cf9b7 windows: add resource.rc files to dll builds
Windows uses a mechanism known as 'resource files' which provides, among
other things, metadata to a given executable/dll/driver/etc, and add a
layer of polish to a project which it would otherwise lack.
2021-04-11 16:02:51 +02:00
David Carlier
4cbb34ddb4 NetBSD support proposal. 2020-12-07 16:08:00 +01:00
Corentin Schreiber
0d82b99c7d Added missing dependency on Xcursor in SFMLConfigDependencies.cmake.in 2020-09-13 20:35:48 +02:00
Jan Hahlganß
1d20edebc7 SFMLConfigDependencies.cmake.in: Vorbis uppercase 2020-01-24 08:56:13 +01:00
Jan Haller
110fb75513 Rename FindVorbis -> FindVORBIS, for consistency with exported variables (e.g. VORBIS_FOUND)
Fixes #1626
2020-01-02 15:28:31 +01:00
kimci86
80c3bdc23c Fix CMake scripts to install and find doxygen's generated SFML.tag file 2019-11-19 09:26:49 +01:00
Jonny
27a4c83ebc Use GnuInstallDirs module for cmake install paths 2019-09-01 21:48:10 +02:00
Lukas Dürrenberger
7e7216f598 Renamed test targets to test-sfml-module structure 2019-02-19 10:16:38 +01:00
=
53972ed5f2 Use sfml_add_test macro for unit tests and copy dlls to output directory if required 2019-02-19 10:16:38 +01:00
Jonny Paton
d53858afb1 Removed incompatible cmake/catch functionality, replaced with vanilla cmake 2019-02-19 10:16:38 +01:00
Jonny Paton
d3a072fb63 Use modern cmake testing functionality including catch integration 2019-02-19 10:16:38 +01:00
Jonny Paton
353c846c87 Update examples for iOS including touch support, proper handling of window resize, launch screens and icons 2019-01-19 01:34:30 +01:00
Ceylo
82c2f4c05e All mobile-compatible examples now successfully link 2019-01-19 01:29:12 +01:00
=
195f5d7409 Removed old android cmake toolchain 2019-01-09 15:22:49 +00:00
Elias Daler
b81de898bf Modify install rpath only if BUILD_SHARED_LIBS is ON 2018-12-03 19:39:19 +01:00
Elias Daler
fbc0f17198 Fix RPATH for installed examples on Linux 2018-12-03 19:39:19 +01:00
Kwasior
43f0292cb8
Fix audio components linking order 2018-08-14 14:59:57 +02:00
Lukas Dürrenberger
9712bb1ec8 Fixed the installation of pkg-config files
* Removed duplicated CMake code
* Made it possible to manually specify the pkg-config path
* Install pkg-config files by default on Linux and BSD systems
2018-08-13 22:46:20 +02:00
Jonny Paton
ac38b17827 Fix config for finding dependencies on iOS 2018-07-28 18:30:25 +02:00
Ceylo
ff011dc51d Modernize iOS toolchain: remove BUILD_ARM64, drop support for Xcode <4.3 and don't pretend defining official CMake variables 2018-06-04 23:22:21 +02:00
James Cowgill
88bb3f89a5 Install CMake config files into lib${LIB_SIFFIX} 2018-05-18 22:05:48 +02:00
Marty E. Plummer
c828314d12 cmake/Macros.cmake: ex:->examples:
vim interprets the # ex: comments as a modeline, which causes editing
this file with vim to throw an error.

Signed-off-by: Marty E. Plummer <hanetzer@startmail.com>
2018-05-18 21:50:25 +02:00
Mario Liebisch
2cd4797557 Examples: Set startup folder for debugging in Visual Studio 2018-04-14 11:02:21 +02:00
David Carlier
9da895da8b further changes 2018-04-14 10:14:34 +02:00
David Carlier
4d0d331272 pushing upstream openbsd support from package. 2018-04-14 10:14:34 +02:00
Jonny Paton
7be2111d61 Add iOS demo 2018-03-26 18:42:19 -07:00
Ceylo
09e24adf2e Remove FindSFML.cmake 2018-03-27 00:03:34 +02:00
Ceylo
a94b3e9e24 Add support for SFMLConfig.cmake 2018-03-27 00:03:34 +02:00
Ceylo
ee08e18726 Modernize CMake files 2018-03-27 00:03:34 +02:00
Ceylo
8b7a50a914 Fix CMake warning on macOS since CMake 3.9 2018-03-12 15:09:59 +01:00
Jonny Paton
910458cfb3 Remove references to SIMULATOR64, as 32 bit is no longer available 2018-03-12 15:04:30 +01:00
Jonny Paton
b196aac5c7 Drop 32 bit support on iOS 2018-03-12 15:04:29 +01:00
Jonny Paton
0118776b7e Force correct iOS architecture for cmake 2018-02-25 13:13:52 -08:00
Mario Liebisch
806813e937 Android: Removed custom toolchain file
This commit drops the previous custom CMake toolchain file for Android
in favor of CMake's new built-in toolchain for this (CMake >3.7.2).

This makes building SFML for Android a lot simpler and more straight
forward, working almost as smooth as other platforms.

To configure your build directory, all you have to do is defining just a
few variables the first time you invoke CMake.

**Required Variables**

* `CMAKE_SYSTEM_NAME` must be `Android`, so CMake knows we actually want
  to cross-compile.
* `CMAKE_ANDROID_NDK` must point to the NDK's installation directory,
  e.g. `/usr/android/ndk` or `c:/android/ndk`.

**Recommended Variables**
* `CMAKE_ANDROID_STL_TYPE` defines the STL implementation to be used.
  You should use `c++_shared`, although others might work.

**Optional Variables**
* `CMAKE_SYSTEM_VERSION` can be set to pick a specific SDK version other
  than the latest.
* `CMAKE_ANDROID_ARCH_ABI` defines the target architecture and ABI, for
  example `armeabi` or `armeabi-v7a`.

Based on your system, you might want to enforce a specific generator to
prevent issues, e.g. using `MinGW Makefiles`.
2018-02-11 20:15:54 +01:00
Alexander Weinrauch
0da25a0b87 Added support for the newest NDK version 2018-02-11 20:15:54 +01:00
Maximilian Wagenbach
989367e345 Turned the header image in readme.md into a link.
Updated all links to use https (tested).
2018-02-10 17:12:54 +01:00
Ceylo
511c16329e Use -stdlib=libc++ on macOS 2018-02-10 14:42:51 +01:00
Jonny Paton
d6c6345d4c Don't need to find vorbisfile or vorbisenc on iOS 2018-01-29 17:53:46 +01:00
papychacal
341bc2a130 Added Tagfile generation and finding 2018-01-25 22:00:38 +01:00
Ceylo
ce7ced5488 Replace INSTALL_RESOURCES_DIR option of sfml_add_example() command with RESOURCES_DIR 2018-01-25 00:23:33 +01:00
Ceylo
777ec2c04d Fix launch of Cocoa example due to missing MainMenu.nib in bundle app 2018-01-25 00:23:33 +01:00
Tucker Lein
b6c1acab3c add license to top of toolchain file 2018-01-09 22:06:55 +01:00
tlein
bba5808717 use a toolchain file for iOS instead of setting the necessary CMake variables in SFML 2018-01-09 22:06:55 +01:00
Laurent Gomila
2aa70def6f Removed dependency to libjpeg, stb_image_write now supports writing JPEG files 2017-09-28 19:55:10 +02:00
Rafael Kitover
5fe5e5d6d7 packaging support improvements
This grew out of my work creating an sfml port for macports, but should
be helpful for package maintainers of various distributions:

* add an SFML_USE_SYSTEM_DEPS option to ignore everything in extlibs/
  except for headers/stb_image, and use the system versions

* install pkg-config files if a pkg-config program is found
  and either lib/pkgconfig or libdata/pkgconfig exists under the
  INSTALL_PREFIX, or the SFML_INSTALL_PKGCONFIG_FILES flag is set
  explicitly

* install pkg-config files for static libs too, add the necessary
  Requires.private and Libs.private entries to the .pc files to support
  static linking

* on OS X, honor all INSTALL_NAME and RPATH related cmake variables and
  only set the INSTALL_NAME_DIR to "@rpath" if none of them is set, this
  preserves the default behavior of using @rpath but also allows
  overriding by the usual cmake mechanisms
2017-02-28 10:03:14 +01:00
Mario Liebisch
95828a85a2 Added some simple messaging when trying to build under Cygwin 2016-10-04 09:33:15 +02:00
binary1248
9996b7abb6 Converted Unix Window implementation from XCB back to Xlib. 2016-09-29 09:25:34 +02:00
James Cowgill
e199ef3790 Define SFML_OS_FREEBSD when compiling for kFreeBSD 2016-08-24 14:05:40 +02:00
Manu343726
9558c6d689 Correctly add XCB components if no components are requested
This commit fixes the FindXCB.cmake module for the case no components
are requested. The previous version assigned `XCB_FIND_COMPONENTS`
list to an empty variable name.

I was lucky enough to catch the bug in a corner case where both
`XCB_COMPONENTS` and `XCB_FIND_COMPONENTS` were empty and `set()`
command failed, but note this awesome CMake language supports more annoying
corner cases like `XCB_COMPONENTS` empty and `XCB_FIND_COMPONENTS`
with two elements, which results in the following `set()` invocation:

``` cmake
set(${XCB_FIND_COMPONENTS[0]} ${XCB_FIND_COMPONENTS[1]})
```

So always beware of CMake secret charms...
2016-08-24 14:05:17 +02:00
Mario Liebisch
3a2e176e59 Android: Readded support for libc++ and use it as the standard STL 2016-07-23 14:35:10 +02:00
Mario Liebisch
757094a25b Fixed current Android compilation issues
* Updated the Android toolchain file to support NDKs up to the latest release (r12b; based on https://github.com/gongminmin/android-cmake).
* Fixed missing sRGB extension defines - also SFML once again compiles for older target API levels not having the sRGB extensions (fixes #1079, supersedes #1085).
* Changed SFML's default STL runtime to `stlport_shared`, since `c++_shared` is no longer supported.
2016-07-21 10:42:45 +02:00
Mario Liebisch
ba9383f25e Updated/fixed string comparisons in Config.cmake
SFML so far used `${CMAKE_SYSTEM_NAME} MATCHES "Windows"`. This works, but only because there's a variable `WINDOWS` having the exact same content (`Windows`).

[More information and a similar issue can be found in this SO thread.](http://stackoverflow.com/questions/21995777/cygwins-cmake-does-not-match-for-cmake-system-name)
2016-07-17 20:13:14 +02:00
Andras Kucsma
fb40e7e43f Change comment chars in FindSFML.cmake to # 2016-06-05 00:08:55 +02:00
Jan Haller
77609e166a Added SFML_GENERATE_PDB CMake option; check CMake version dynamically 2016-03-01 17:14:21 +01:00
Jan Haller
2bd897c513 Create and install PDB debug symbols alongside binaries 2016-03-01 17:14:20 +01:00
Lukas Dürrenberger
1217699fe0 Added the missing -s postfix for the RelWithDebInfo config. 2015-12-31 11:13:58 +01:00
Lukas Dürrenberger
6b9781475d Added support for VS 2015. 2015-09-30 08:32:30 +02:00
Alexander Ankudinov
18193a5cde Fix FindSFML.cmake can't find SFML 2.1 2015-08-24 13:36:04 +02:00
dawid-aurobit
7fba68ac52 convert FLAC name to upper case 2015-08-04 09:50:18 +02:00
binary1248
e80bf0ba92 Fix whitespace: Convert tabs to spaces and remove trailing whitespace. 2015-04-15 01:53:43 +02:00
binary1248
3ec672afe9 Removed XCB dependencies (EWMH, ICCCM, Keysyms, Util), added XCB libraries to FindSFML.cmake, fixed checking for X11 library checking for XRandR instead. 2015-04-06 01:06:00 +02:00
Jan Haller
5ce73e9274 FindSFML.cmake: Added missing VorbisEnc dependency 2015-03-31 20:59:22 +02:00
Jan Haller
c0bee34d42 FindSFML.cmake: Ignored environment variables to find library paths
Environment variables (e.g. PATH on Windows) are looked up early by CMake, and libraries found there are prioritized over those in SFML's own folder. To avoid paths to wrong libraries, this commit modifies the CMake find_library() call, such that environment variables are no longer considered as suitable paths.
2015-03-31 20:59:21 +02:00
Lukas Dürrenberger
23cc8cfe3f Only link sfml-main for the GUI examples in release mode. 2015-03-26 10:23:28 +01:00
binary1248
3e397bff4b Replaced GLEW with (a highly customized) loader generated by glLoadGen, restructured GLExtensions.hpp for easier extension bookkeeping, make use of GLEXT definitions in Shader.cpp and Texture.cpp as well, replaced GL_MAX_TEXTURE_COORDS with GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, implemented flags for requesting a debug or core/compatibility profile context, changed the default context version from 2.0 to 2.1. 2015-03-23 16:10:28 +01:00
Lukas Dürrenberger
d53338298a Added the FindFreetype.cmake CMake module, set the minimum require CMake version to 2.8.3 and fixed the paths to the FreeType headers. 2015-03-21 10:30:31 +01:00
Lukas Dürrenberger
bbfa3d5a76 Changed the SOVERSION to major.minor. 2015-03-12 11:06:33 +01:00
Oleh Prypin
01d5d1b463 Replaced non-ASCII symbols with equivalents 2015-03-10 02:04:02 +02:00