Boost C++ Libraries: Ticket #10591: boost::filesystem does not build on iOS 8 https://svn.boost.org/trac10/ticket/10591 <p> boost::filesystem::detail::operations relies on AT_SYMLINK_NOFOLLOW macro to decide whenever to use fchmodat function or not. Since iOS8 AT_SYMLINK_NOFOLLOW is defined on iOS but fchmodat still not available which breaks this logic and lead to compilation error. </p> en-us Boost C++ Libraries /htdocs/site/boost.png https://svn.boost.org/trac10/ticket/10591 Trac 1.4.3 Beman Dawes Fri, 24 Oct 2014 19:32:48 GMT status changed https://svn.boost.org/trac10/ticket/10591#comment:1 https://svn.boost.org/trac10/ticket/10591#comment:1 <ul> <li><strong>status</strong> <span class="trac-field-old">new</span> → <span class="trac-field-new">assigned</span> </li> </ul> <p> I have not have access to an iOS8 development environment, so will not be able to fix this without some help. </p> <p> If you could submit a patch, that would be very helpful. Otherwise, could you find out how to detect (presumably by compiler or library defined macros) whether or not fchmodat is available in your compilation environment? </p> <p> Thanks, </p> <p> --Beman </p> Ticket vanderhu Fri, 05 Dec 2014 08:05:55 GMT <link>https://svn.boost.org/trac10/ticket/10591#comment:2 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/10591#comment:2</guid> <description> <p> The problem is no only with usage of iPhoneOS8.1.sdk, it is also affecting MacOSX10.10.sdk as in both AT_SYMLINK_NOFOLLOW is nowadays defined. There are basicly two solutions for this problem: 1) Completely stop supporting both iOS and OSX for all versions as fchmodat was never supported 2) Use specific defines to ignore it after OSX10.10 and iOS8.1 </p> <p> Actually it doesn't lead to a compilation error in our case, but a runtime error. I could deliver patches for both solutions. </p> </description> <category>Ticket</category> </item> <item> <dc:creator>anonymous</dc:creator> <pubDate>Mon, 23 Mar 2015 08:02:17 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/10591#comment:3 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/10591#comment:3</guid> <description> <p> any progress on this one? </p> </description> <category>Ticket</category> </item> <item> <author>tiwoc@…</author> <pubDate>Thu, 13 Aug 2015 15:45:10 GMT</pubDate> <title>attachment set https://svn.boost.org/trac10/ticket/10591 https://svn.boost.org/trac10/ticket/10591 <ul> <li><strong>attachment</strong> → <span class="trac-field-new">boost-fs-fchmodat-darwin.patch</span> </li> </ul> Ticket tiwoc@… Thu, 13 Aug 2015 15:54:43 GMT <link>https://svn.boost.org/trac10/ticket/10591#comment:4 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/10591#comment:4</guid> <description> <p> Apple does implement fchmodat from OS X 10.10 and iOS 8.0. Have a look at the following line of /usr/include/sys/stat.h: </p> <pre class="wiki">int fchmodat(int, const char *, mode_t, int) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0); </pre><p> This means that fchmodat will only be available when <strong>targeting</strong> OS X 10.10+ or iOS 8.0+, but the AT_* constants are always defined when building <strong>on</strong> 10.10, so they cannot be used for detection whether fchmodat is available. </p> <p> I just posted a patch that uses the <span class="underline">MAC_OS_X_VERSION_MIN_REQUIRED and </span>IPHONE_OS_VERSION_MIN_REQUIRED defines for detection. It has been verified to work well with Boost 1.58.0 on OS X 10.9 and 10.10 (both targeting 10.9), Linux and Windows (MSVC). </p> </description> <category>Ticket</category> </item> <item> <dc:creator>Beman Dawes</dc:creator> <pubDate>Fri, 28 Aug 2015 20:55:33 GMT</pubDate> <title>status changed; resolution set https://svn.boost.org/trac10/ticket/10591#comment:5 https://svn.boost.org/trac10/ticket/10591#comment:5 <ul> <li><strong>status</strong> <span class="trac-field-old">assigned</span> → <span class="trac-field-new">closed</span> </li> <li><strong>resolution</strong> → <span class="trac-field-new">fixed</span> </li> </ul> <p> Thanks to Daniel Seither for supplying a version specific patch for OS X and IOS. </p> <p> The patch has been applied to develop, and will be merged to master in a few days assuming the regression tests cycle OK. </p> <p> --Beman </p> Ticket tibore@… Fri, 27 Jan 2017 16:50:59 GMT status, version changed; resolution deleted https://svn.boost.org/trac10/ticket/10591#comment:6 https://svn.boost.org/trac10/ticket/10591#comment:6 <ul> <li><strong>status</strong> <span class="trac-field-old">closed</span> → <span class="trac-field-new">reopened</span> </li> <li><strong>version</strong> <span class="trac-field-old">Boost 1.56.0</span> → <span class="trac-field-new">Boost 1.63.0</span> </li> <li><strong>resolution</strong> <span class="trac-field-deleted">fixed</span> </li> </ul> <p> We tried to build 1.63.0 on OS X 10.11 targeting 10.9 and linking failed with the exact same reason (missing fchmodat). We had to switch to the fallback solution by hand. I don't get why the patch stopped working but it certainly did. </p> Ticket anonymous Fri, 27 Jan 2017 18:09:40 GMT <link>https://svn.boost.org/trac10/ticket/10591#comment:7 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/10591#comment:7</guid> <description> <p> After some investigation we found that <span class="underline">MAC_OS_X_VERSION_MIN_REQUIRED</span> is 101100 in our build environment and not 100900 as one would expect. </p> </description> <category>Ticket</category> </item> </channel> </rss>