[cmake-developers] Create subdirectories in Resource directory for Frameworks and Application bundle.

Ruslan Baratov ruslan_baratov at yahoo.com
Fri Dec 11 19:58:19 EST 2015


On 12-Dec-15 03:46, Bartosz Kosiorek wrote:
>
> Hi
>
> To enable iOS build, I'm using following settings in CMakeLists.txt:
>
>
> set(APPLE_PLATFORM "iphonesimulator")
I think this one not needed. Can't find any place where it parsed.

> set(CMAKE_OSX_SYSROOT 
> "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk")
Can be set to:

    set(CMAKE_OSX_SYSROOT "iphoneos")

in this case will support both simulator and device

> set(CMAKE_C_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mios-version-min=7.0")
> set(CMAKE_CXX_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT} 
> -mios-version-min=7.0")
You can set minimum version by 
CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET variable.
In case of `CMAKE_OSX_SYSROOT` variable is set to `iphoneos` option 
`-isysroot` is redundant.

>
> Do you think it should be documented?
>
> Where is the good place to do so?
> Maybe somewhere here:
> https://cmake.org/cmake/help/v3.4/variable/CMAKE_OSX_SYSROOT.html
>
>
> What do you think?
>
>>
>
> ------------------------------------------------------------------------
> *From:* clinton at elemtech.com <clinton at elemtech.com>
> *Sent:* Friday, December 11, 2015 8:21 PM
> *To:* Bartosz Kosiorek
> *Cc:* Bartosz Kosiorek; cmake-developers; Gregor Jasny
> *Subject:* Re: [cmake-developers] Create subdirectories in Resource 
> directory for Frameworks and Application bundle.
>
>
>
> ----- On Dec 11, 2015, at 11:44 AM, Bartosz Kosiorek 
> <gang65 at poczta.onet.pl> wrote:
>
>     Hi
>
>     Because there is difference between OS X and iOS Bundles directory
>     structure (see: Apple specification
>     https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html),
>
>     in trunk (In CMake 3.5) RESOURCE property create corresponding
>     directory structure.
>     I have already fix that with:
>     https://public.kitware.com/Bug/view.php?id=15848
>
> Ok.  I hadn't been following all your work.
> Also, I didn't see a toggle in the CMake code you sent to choose an 
> iOS bundle instead of OS X bundles.  How is that toggled?
>
>     So RESOURCE gives you a level of abstraction:
>     For OSX:
>     it will create "Resource" directory
>
>     For iOS it will create "flat" directory structure.
>
>     In your example "Resource" directory will be created in both cases
>     (for OSX and iOS).
>     Which is wrong:
>     For OSX: it should  create "Resource" directory
>     For iOS it will create "flat" directory structure.
>
>     I could provide patch to fix that issue, if you agree with that.
>     What do you think about that?
>     Do you think the same should be applied to "Headers"?
>
>
> I think the abstraction seems reasonable, as well as what you are 
> proposing.  However, I'm not an Apple guru.
> I wonder if there are other Apple experts that can weigh in this if 
> better feedback is needed.
>
> Clint
>
>
>
>     Best Regards
>     Bartosz
>
>
>
>     2015-12-11 19:06 GMT+01:00 Clinton Stimpson <clinton at elemtech.com
>     <mailto:clinton at elemtech.com>>:
>
>
>
>         On Friday, December 11, 2015 05:01:41 PM Bartosz Kosiorek wrote:
>         > Thanks Clint
>         >
>         > Unfortunately MACOSX_PACKAGE_LOCATION is not working
>         correctly with RESOURCE
>         > property. For every resource which is marked as RESOURCE,
>         will be placed in
>         > root "Resources" directory.
>         >
>         > The CMake code below create following directory structure
>         for OS X:
>         >
>         > ── mul.framework
>         >     ├── Headers -> Versions/Current/Headers
>         >     ├── Resources -> Versions/Current/Resources
>         >     ├── Versions
>         >     │   ├── A
>         >     │   │   ├── Headers
>         >     │   │   │   └── mul.h
>         >     │   │   ├── Modules
>         >     │   │   │   └── module.modulemap
>         >     │   │   ├── Resources
>         >     │   │   │   ├── Info.plist
>         >     │   │   │   ├── mulres.txt
>         >     │   │   │   ├── pl.txt
>         >     │   │   │   └── resourcefile.txt
>         >     │   │   ├── lang
>         >     │   │   │   └── en.txt
>         >     │   │   └── mul
>         >     │   └── Current -> A
>         >     └── mul -> Versions/Current/mul
>         >
>         >
>         > As you can see eveything which is marked as "RESOURCE" will
>         be placed in
>         > Versions/A/ directory My expectation will be that
>         lang/pl.txt and
>         > lang/en.txt should be in Resources/lang/ directory. Here is
>         complete
>         > directory structure:
>         >
>         > ── mul.framework
>         >     ├── Headers -> Versions/Current/Headers
>         >     ├── Resources -> Versions/Current/Resources
>         >     ├── Versions
>         >     │   ├── A
>         >     │   │   ├── Headers
>         >     │   │   │   └── mul.h
>         >     │   │   ├── Modules
>         >     │   │   │   └── module.modulemap
>         >     │   │   ├── Resources
>         >     │   │   │   ├── Info.plist
>         >     │   │   │   ├── mulres.txt
>         >     │   │   │   ├── lang
>         >     │   │   │   │   └── pl.txt
>         >     │   │   │   │   └── en.txt
>         >     │   │   │   └── resourcefile.txt
>         >     │   │   ├── lang
>         >     │   │   │   └── en.txt
>         >     │   │   └── mul
>         >     │   └── Current -> A
>         >     └── mul -> Versions/Current/mul
>         >
>         >
>         > What do you think about that?
>         >
>         > Here is the source code:
>         >
>         > set_property(SOURCE module.modulemap
>         >   PROPERTY MACOSX_PACKAGE_LOCATION "Modules")
>         >
>         > set_property(
>         >   SOURCE lang/en.txt lang/pl.txt
>         >   PROPERTY MACOSX_PACKAGE_LOCATION "lang")
>         >
>         > set(RESLIST
>         >     mulres.txt
>         >     lang/pl.txt
>         >     resourcefile.txt
>         >     )
>         >
>         > add_library(mul SHARED
>         >             mul.c
>         >             mul.h
>         >             module.modulemap
>         >             lang/pl.txt
>         >             lang/en.txt
>         >             resourcefile.txt
>         >             mulres.txt)
>         >
>         > # Create an iOS Framework bundle
>         > set_target_properties(mul PROPERTIES
>         >   FRAMEWORK TRUE
>         >   MACOSX_FRAMEWORK_IDENTIFIER org.cmake.mul
>         >   MACOSX_FRAMEWORK_SHORT_VERSION_STRING 42
>         >   MACOSX_FRAMEWORK_BUNDLE_VERSION 3.2.10
>         >   XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
>         >   PUBLIC_HEADER mul.h
>         >   RESOURCE "${RESLIST}"
>         > )
>
>
>         Here is a CMakeLists.txt that will give you the desired layout.
>         I also see that MACOSX_PACKAGE_LOCATION doesn't work with
>         RESOURCE.
>
>
>         set_property(SOURCE module.modulemap
>           PROPERTY MACOSX_PACKAGE_LOCATION "Modules")
>
>         set_property(
>           SOURCE lang/pl.txt lang/en.txt
>           PROPERTY MACOSX_PACKAGE_LOCATION "Resources/lang")
>
>         set(RESLIST
>             mulres.txt
>             resourcefile.txt
>             )
>
>         add_library(mul SHARED
>                     mul.c
>                     mul.h
>                     module.modulemap
>                     lang/pl.txt
>                     lang/en.txt
>                     resourcefile.txt
>                     mulres.txt)
>
>         # Create an iOS Framework bundle
>         set_target_properties(mul PROPERTIES
>           FRAMEWORK TRUE
>           MACOSX_FRAMEWORK_IDENTIFIER org.cmake.mul
>           MACOSX_FRAMEWORK_SHORT_VERSION_STRING 42
>           MACOSX_FRAMEWORK_BUNDLE_VERSION 3.2.10
>           XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
>           PUBLIC_HEADER mul.h
>           RESOURCE "${RESLIST}"
>         )
>
>
>         Now I'm wondering what does the RESOURCE target property do that
>         MACOSX_PACKAGE_LOCATION doesn't already support?
>
>         Clint
>         --
>
>         Powered by www.kitware.com <http://www.kitware.com>
>
>         Please keep messages on-topic and check the CMake FAQ at:
>         http://www.cmake.org/Wiki/CMake_FAQ
>         <http://www.cmake.org/Wiki/CMake_FAQ>
>
>         Kitware offers various services to support the CMake
>         community. For more information on each offering, please visit:
>
>         CMake Support: http://cmake.org/cmake/help/support.html
>         <http://cmake.org/cmake/help/support.html>
>         CMake Consulting: http://cmake.org/cmake/help/consulting.html
>         <http://cmake.org/cmake/help/consulting.html>
>         CMake Training Courses:
>         http://cmake.org/cmake/help/training.html
>         <http://cmake.org/cmake/help/training.html>
>
>         Visit other Kitware open-source projects at
>         http://www.kitware.com/opensource/opensource.html
>
>         Follow this link to subscribe/unsubscribe:
>         http://public.kitware.com/mailman/listinfo/cmake-developers
>
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20151212/ca9e8b22/attachment-0001.html>


More information about the cmake-developers mailing list