SFML community forums

Help => General => Topic started by: JinLisek on August 01, 2018, 09:05:25 am

Title: Deprecated auto_ptr in AudioDevice and CMake configuration
Post by: JinLisek on August 01, 2018, 09:05:25 am
Hello,

I'm new to the forum (and using forums in general), so be gentle, please. ;) And nice to meet you!

I've just started using SFML today. What I want to do is to compile SFML, along my game, within CMake project.

I think, I've correctly compiled and linked SFML, because below code works as expected:
sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)

Before I begin to describe the issue, I'll just say that I've tried to search for an answer, but to no avail. I've found this https://en.sfml-dev.org/forums/index.php?topic=21110.0 (https://en.sfml-dev.org/forums/index.php?topic=21110.0), but I haven't found my answer there. I've also read CMake Tutorial for compiling SFML, but it doesn't work for me, as I don't want to compile just SFML, but whole project (and SFML is a part of it). SFML I use is taken directly from github (at tag 2.5.0) and added to my project as git submodule.

My problem is that I get a warning while compiling AudioDevice.cpp:
../deps/sfml/src/SFML/Audio/AudioDevice.cpp:110:10: warning: &#8216;template<class> class std::auto_ptr&#8217; is deprecated [-Wdeprecated-declarations]
     std::auto_ptr<AudioDevice> device;
 

From the knowledge I've gathered so far, it seems the issue is with my project using different compiler than compiler used to compile SFML. However, I don't think that's possible, as my project compiles SFML (so the compiler should be the same).

Below are my CMake files, but only those that I think matter. I also removed lines which include different libraries etc.

My sfml.cmake:
set(SFML_DIR "deps/sfml/"
    CACHE PATH "The path to the SFML framework.")

add_subdirectory(${SFML_DIR} ${CMAKE_BINARY_DIR}/sfml)
include_directories(SYSTEM ${SFML_DIR}/sfml/include
                           ${SFML_DIR}/sfml/include)
 

My main CMakeLists.txt:
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)

project("Snake With A Twist")

list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)

include(sfml)

add_subdirectory(app)
 

My app CMakeLists.txt:
add_executable(SnakeWithATwist main.cpp)

target_link_libraries(SnakeWithATwist
    PRIVATE sfml-window
)

target_compile_options(SnakeWithATwist PRIVATE -Wall -Wextra -Werror)

target_compile_features(SnakeWithATwist PRIVATE cxx_std_14)
 

If you want a deeper look, here is my project: https://github.com/JinLisek/SimpleSnakeGame (https://github.com/JinLisek/SimpleSnakeGame)

The correction is probably easy, but since my CMake experience is not that big, I just can't wrap my head around it. Any help is welcome and I'll be very grateful for all answers!
Title: Re: Deprecated auto_ptr in AudioDevice and CMake configuration
Post by: Laurent on August 01, 2018, 09:56:32 am
That's just a warning, it shouldn't stop your project from compiling. You use -Werror but that's just for your own sources, not for SFML, right?
Title: Re: Deprecated auto_ptr in AudioDevice and CMake configuration
Post by: JinLisek on August 01, 2018, 08:01:46 pm
You're right about it compiling. However, as I always try to do something better, if it's possible, I'd like to keep the project clean of warnings.

I'm not sure how CMake configures SFML. I've added -Werror to my main target, SnakeWithATwist, like this:
target_compile_options(SnakeWithATwist PRIVATE -Wall -Wextra -Werror)
 

But target SnakeWithATwist depends on SFML:
target_link_libraries(SnakeWithATwist PRIVATE sfml-window)
 

Shouldn't CMake also apply -Werror to sfml-window then?

And is it possible to somehow get rid of the warning? Well, I could locally just change auto_ptr to unique_ptr, if it doesn't take too much effort. Or is there some other way?

EDIT: After all, it was trivial to change auto_ptr to unique_ptr. Is it possible to apply the change to SFML repo? I know it's called pull request, but I don't know how to do that and if it's possible with SFML.

EDIT 2: I've created a pull request here: https://github.com/SFML/SFML/pull/1463 (https://github.com/SFML/SFML/pull/1463)
I think the topic can be closed. :)
Title: Re: Deprecated auto_ptr in AudioDevice and CMake configuration
Post by: binary1248 on August 01, 2018, 11:51:27 pm
If you ask me we should just add
Code: [Select]
set_target_properties(sfml-<module> PROPERTIES CXX_STANDARD 98 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO)to all the module target definitions as long as SFML is still a C++98 library. If the compiler knows we are compiling using the C++98 standard it is smart enough to ignore std::auto_ptr usage and anything else that might be/get deprecated.
Title: Re: Deprecated auto_ptr in AudioDevice and CMake configuration
Post by: JinLisek on August 02, 2018, 04:21:01 pm
Thank you! That worked for me. :)

I didn't know that SFML uses C++ 98, but my pull request was canceled, so now I know. ;D

I'll just put set_target_properties for sfml-audio, because other modules compile just fine in C++ 11. :)
Title: Re: Deprecated auto_ptr in AudioDevice and CMake configuration
Post by: Elias Daler on August 16, 2018, 12:03:28 am
It's a bit trickier for latest versions of MSVC. If you compile everything as C++17 now, you'll have auto_ptr disabled by default. To enable it, you need to define _HAS_AUTO_PTR_ETC.

By the way, won't using pre-C++11 .so with >=C++11 code cause some problems? As far as I know, ABI has changed for pre and post C++11 libstdc++. Won't this cause some troubles if we always build SFML as C++03?
Title: Re: Deprecated auto_ptr in AudioDevice and CMake configuration
Post by: JinLisek on August 29, 2018, 07:17:52 pm
Refresh, since nobody answered and the question asked by Elias Daler above is quite interesting, at least for me.

Now, that you mention it, I guess I'll try compiling my project with C++17.
Title: Re: Deprecated auto_ptr in AudioDevice and CMake configuration
Post by: Redee on March 08, 2021, 01:18:31 pm
Yes >>

(https://i.ibb.co/zXQvTTc/Screenshot-2.png)
Title: Re: Deprecated auto_ptr in AudioDevice and CMake configuration
Post by: eXpl0it3r on March 08, 2021, 02:17:44 pm
std::auto_ptr has since been removed (https://github.com/SFML/SFML/pull/1546) anyways. Check out the master branch.  :)
Title: Re: Deprecated auto_ptr in AudioDevice and CMake configuration
Post by: Redee on March 08, 2021, 09:48:52 pm
std::auto_ptr has since been removed (https://github.com/SFML/SFML/pull/1546) anyways. Check out the master branch.  :)
Cool  ;) :)