View Issue Details [ Jump to Notes ] | [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0014602 | CMake | CMake | public | 2013-11-27 13:44 | 2014-10-06 10:32 | ||||
Reporter | Aleix Pol | ||||||||
Assigned To | |||||||||
Priority | normal | Severity | minor | Reproducibility | always | ||||
Status | closed | Resolution | no change required | ||||||
Platform | OS | OS Version | |||||||
Product Version | CMake 2.8.12 | ||||||||
Target Version | Fixed in Version | ||||||||
Summary | 0014602: Make it possible to disable SONAME generation for libraries | ||||||||
Description | I'm working on a Toolchain file for Android. The soname doesn't work there, so I want to be able to disable it without having to modify the source code of the library to adapt by removing the set_properties that set the SONAME. | ||||||||
Additional Information | I tried with the NO_SONAME and IMPORTED_NO_SONAME properties and setting CMAKE_SHARED_LIBRARY_SONAME_C_FLAG to "", but it didn't seem to help. | ||||||||
Tags | No tags attached. | ||||||||
Attached Files | |||||||||
Relationships | |
Relationships |
Notes | |
(0034664) Brad King (manager) 2013-12-02 09:29 |
Setting NO_SONAME is expected to work: http://www.cmake.org/cmake/help/v2.8.12/cmake.html#prop_tgt:NO_SONAME [^] http://cmake.org/gitweb?p=cmake.git;a=blob;f=Source/cmTarget.cxx;hb=v2.8.12.1#l4500 [^] Can you post a minimal example where it fails? |
(0034665) Aleix Pol (reporter) 2013-12-02 09:34 |
NO_SONAME is a per-target property, I need to set it to the whole project. That's why I said I needed to do it from a Toolchain file. Is it possible to set a property for all targets? |
(0034667) Brad King (manager) 2013-12-02 09:56 |
The toolchain file and platform information modules need to be configured to set CMAKE_SHARED_LIBRARY_SONAME_C_FLAG to empty if the platform does not support it. The value is set by Modules/Platform/*.cmake files based on known capabilities of each platform. Therefore you must not be configuring CMake to load the proper platform information files. |
(0035178) Aleix Pol (reporter) 2014-02-24 19:20 |
Why does it make a difference when is it initialized? Should I patch cmake to be able to disable so-names then? |
(0035179) Stephen Kelly (developer) 2014-02-24 19:21 |
> NO_SONAME is a per-target property, I need to set it to the whole project. But you said it doesn't work, even as a per-target property. |
(0035181) Brad King (manager) 2014-02-25 07:58 |
Re 0014602:0035178: The CMAKE_SHARED_LIBRARY_SONAME_C_FLAG is not a cache entry, but a normal CMake language variable. The Modules/Platform/*.cmake files set the value and will override anything that you try to set in the toolchain file because they are loaded later. The problem is that your toolchain file is telling CMake to target a particular platform, and CMake knows that platform supports soname with a certain flag. If that is not true then you are telling CMake to target the wrong platform. |
(0035197) Aleix Pol (reporter) 2014-02-25 15:54 |
Noted, we understand the problem. I'm trying to find a solution. It's android, so it's using Linux as a base. The platform file is processed after the Toolchain file is executed, so I have no possibility to change. Should I create another Platform file for Android that overrides this, then? For reference, see [1] (take it as a proof of concept). [1] http://quickgit.kde.org/?p=scratch%2Fapol%2Fkalgebraandroid.git&a=blob&h=d32657afec060afe980f44f57cea6b86774c4d43&f=AndroidToolchain.cmake&o=plain [^] |
(0035198) Brad King (manager) 2014-02-25 16:05 |
Add a Platform/Android.cmake file under a directory in your CMAKE_MODULE_PATH and set the CMAKE_SYSTEM_NAME to Android. In Android.cmake place the content include(Platform/Linux) set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "") and any other overrides you want. |
(0035199) Brad King (manager) 2014-02-25 16:06 |
Re 0014602:0035198: Actually, even simpler is to just add a Platform/Linux.cmake file to your CMAKE_MODULE_PATH that does include(${CMAKE_ROOT}/Modules/Platform/Linux.cmake) set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "") and any other overrides you want. Then you do not need to change CMAKE_SYSTEM_NAME. |
(0035200) Aleix Pol (reporter) 2014-02-25 19:58 |
That worked great, I didn't know I could have a different Platform/ directory. Please, consider the bug fixed (I don't think I can close it). I'll leave it like that for the moment. If you think the Toolchain file is worth contributing upstream, please tell me. I know there are things to polish still, but I think it could be a first step. |
(0035202) Brad King (manager) 2014-02-26 07:59 |
Great, thanks for reporting back. |
(0036914) Robert Maynard (manager) 2014-10-06 10:32 |
Closing resolved issues that have not been updated in more than 4 months. |
Notes |
Issue History | |||
Date Modified | Username | Field | Change |
2013-11-27 13:44 | Aleix Pol | New Issue | |
2013-12-02 09:29 | Brad King | Note Added: 0034664 | |
2013-12-02 09:34 | Aleix Pol | Note Added: 0034665 | |
2013-12-02 09:56 | Brad King | Note Added: 0034667 | |
2013-12-02 09:56 | Brad King | Sticky Issue | No => Yes |
2013-12-02 09:56 | Brad King | Sticky Issue | Yes => No |
2014-02-24 19:20 | Aleix Pol | Note Added: 0035178 | |
2014-02-24 19:21 | Stephen Kelly | Note Added: 0035179 | |
2014-02-25 07:58 | Brad King | Note Added: 0035181 | |
2014-02-25 15:54 | Aleix Pol | Note Added: 0035197 | |
2014-02-25 16:05 | Brad King | Note Added: 0035198 | |
2014-02-25 16:06 | Brad King | Note Added: 0035199 | |
2014-02-25 19:58 | Aleix Pol | Note Added: 0035200 | |
2014-02-26 07:59 | Brad King | Note Added: 0035202 | |
2014-02-26 07:59 | Brad King | Status | new => resolved |
2014-02-26 07:59 | Brad King | Resolution | open => no change required |
2014-10-06 10:32 | Robert Maynard | Note Added: 0036914 | |
2014-10-06 10:32 | Robert Maynard | Status | resolved => closed |
Issue History |
Copyright © 2000 - 2018 MantisBT Team |