#44705: fswatch @1.3.9 submission ------------------------------------+-------------------------------- Reporter: enrico.m.crisostomo@… | Owner: macports-tickets@… Type: submission | Status: closed Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: fixed | Keywords: Port: fswatch | ------------------------------------+-------------------------------- Comment (by enrico.m.crisostomo@…): Replying to [comment:9 cal@…]:
Oh well, it doesn't seem like fswatch works at all on 10.6; it seems to require APIs that were not present until 10.7:
{{{ /opt/local/bin/clang++-mp-3.4 -DHAVE_CONFIG_H -I. -I/opt/local/include -pipe -Os -arch x86_64 -stdlib=libstdc++ -std=c++11 -Wall -MT poll_monitor.o -MD -MP -MF .deps/poll_monitor.Tpo -c -o poll_monitor.o poll_monitor.cpp mv -f .deps/event.Tpo .deps/event.Po /opt/local/bin/clang++-mp-3.4 -DHAVE_CONFIG_H -I. -I/opt/local/include -pipe -Os -arch x86_64 -stdlib=libstdc++ -std=c++11 -Wall -MT inotify_monitor.o -MD -MP -MF .deps/inotify_monitor.Tpo -c -o inotify_monitor.o inotify_monitor.cpp mv -f .deps/inotify_monitor.Tpo .deps/inotify_monitor.Po mv -f .deps/monitor.Tpo .deps/monitor.Po mv -f .deps/fswatch_log.Tpo .deps/fswatch_log.Po mv -f .deps/path_utils.Tpo .deps/path_utils.Po fsevent_monitor.cpp:49:21: error: use of undeclared identifier 'kFSEventStreamEventFlagItemCreated'; did you mean 'kFSEventStreamEventFlagUserDropped'? flags.push_back({ kFSEventStreamEventFlagItemCreated, event_flag::Created}); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kFSEventStreamEventFlagUserDropped
/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FSEvents.h:309:3: note: 'kFSEventStreamEventFlagUserDropped' declared here
kFSEventStreamEventFlagUserDropped = 0x00000002, ^ fsevent_monitor.cpp:50:21: error: use of undeclared identifier 'kFSEventStreamEventFlagItemRemoved'; did you mean 'kFSEventStreamEventFlagUserDropped'? flags.push_back({ kFSEventStreamEventFlagItemRemoved, event_flag::Removed}); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kFSEventStreamEventFlagUserDropped
/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FSEvents.h:309:3: note: 'kFSEventStreamEventFlagUserDropped' declared here
kFSEventStreamEventFlagUserDropped = 0x00000002, ^ fsevent_monitor.cpp:51:21: error: use of undeclared identifier 'kFSEventStreamEventFlagItemInodeMetaMod'; did you mean 'kFSEventStreamEventFlagUserDropped'? flags.push_back({ kFSEventStreamEventFlagItemInodeMetaMod, event_flag::PlatformSpecific}); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kFSEventStreamEventFlagUserDropped
/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FSEvents.h:309:3: note: 'kFSEventStreamEventFlagUserDropped' declared here
kFSEventStreamEventFlagUserDropped = 0x00000002, ^ fsevent_monitor.cpp:52:21: error: use of undeclared identifier 'kFSEventStreamEventFlagItemRenamed'; did you mean 'kFSEventStreamEventFlagUserDropped'? flags.push_back({ kFSEventStreamEventFlagItemRenamed, event_flag::Renamed}); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kFSEventStreamEventFlagUserDropped
/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FSEvents.h:309:3: note: 'kFSEventStreamEventFlagUserDropped' declared here
kFSEventStreamEventFlagUserDropped = 0x00000002, ^ fsevent_monitor.cpp:53:21: error: use of undeclared identifier 'kFSEventStreamEventFlagItemModified'; did you mean 'kFSEventStreamEventFlagUserDropped'? flags.push_back({ kFSEventStreamEventFlagItemModified, event_flag::Updated}); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kFSEventStreamEventFlagUserDropped
/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FSEvents.h:309:3: note: 'kFSEventStreamEventFlagUserDropped' declared here
kFSEventStreamEventFlagUserDropped = 0x00000002, ^ fsevent_monitor.cpp:54:21: error: use of undeclared identifier 'kFSEventStreamEventFlagItemFinderInfoMod'; did you mean 'kFSEventStreamEventFlagKernelDropped'? flags.push_back({ kFSEventStreamEventFlagItemFinderInfoMod, event_flag::PlatformSpecific}); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kFSEventStreamEventFlagKernelDropped
/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FSEvents.h:310:3: note: 'kFSEventStreamEventFlagKernelDropped' declared here
kFSEventStreamEventFlagKernelDropped = 0x00000004, ^ fsevent_monitor.cpp:55:21: error: use of undeclared identifier 'kFSEventStreamEventFlagItemChangeOwner'; did you mean 'kFSEventStreamEventFlagRootChanged'? flags.push_back({ kFSEventStreamEventFlagItemChangeOwner, event_flag::OwnerModified}); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kFSEventStreamEventFlagRootChanged
/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FSEvents.h:344:3: note: 'kFSEventStreamEventFlagRootChanged' declared here
kFSEventStreamEventFlagRootChanged = 0x00000020, ^ fsevent_monitor.cpp:56:21: error: use of undeclared identifier 'kFSEventStreamEventFlagItemXattrMod' flags.push_back({ kFSEventStreamEventFlagItemXattrMod, event_flag::AttributeModified}); ^ fsevent_monitor.cpp:57:21: error: use of undeclared identifier 'kFSEventStreamEventFlagItemIsFile' flags.push_back({ kFSEventStreamEventFlagItemIsFile, event_flag::IsFile}); ^ fsevent_monitor.cpp:58:21: error: use of undeclared identifier 'kFSEventStreamEventFlagItemIsDir'; did you mean 'kFSEventStreamEventFlagUnmount'? flags.push_back({ kFSEventStreamEventFlagItemIsDir, event_flag::IsDir}); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kFSEventStreamEventFlagUnmount
/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FSEvents.h:372:3: note: 'kFSEventStreamEventFlagUnmount' declared here
kFSEventStreamEventFlagUnmount = 0x00000080 ^ fsevent_monitor.cpp:59:21: error: use of undeclared identifier 'kFSEventStreamEventFlagItemIsSymlink' flags.push_back({ kFSEventStreamEventFlagItemIsSymlink, event_flag::IsSymLink}); ^ fsevent_monitor.cpp:128:32: error: use of undeclared identifier 'kFSEventStreamCreateFlagFileEvents'; did you mean 'kFSEventStreamCreateFlagNoDefer'? kFSEventStreamCreateFlagFileEvents); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kFSEventStreamCreateFlagNoDefer
/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FSEvents.h:237:3: note: 'kFSEventStreamCreateFlagNoDefer' declared here
kFSEventStreamCreateFlagNoDefer = 0x00000002, ^ 12 errors generated. make[1]: *** [fsevent_monitor.o] Error 1 make[1]: *** Waiting for unfinished jobs.... }}}
The compiler change was correct and worked, but there are other problems. I'd just disable building `fswatch` on all platforms earlier than 10.7:
{{{#!diff Index: Portfile =================================================================== --- Portfile (revision 124133) +++ Portfile (working copy) @@ -25,3 +22,13 @@ checksums rmd160 929cf38c072ed3c5843bc08fd125d0697fecf6f9 \ sha256 f3e37317155dac122ebc4efef9236f273d03e85051bb2e63198ab5453b0a8c34 use_zip yes + +platform darwin { + # Doesn't build on SL due to missing APIs, see #44705 + if {${os.major} <= 10} { + pre-fetch { + ui_error "$name is not supported on Snow Leopard and earlier." + error "unsupported platform" + } + } +} }}}
That makes the compiler blacklist basically useless, but it doesn't hurt to leave it in just in case. OK to commit?
Ok to commit. 10.7 introduced a huge change in that API. There's an Autoconf check but, as we see, it's insufficient to deliver the proper package configuration. fswatch _could_ work if it skipped that source file (because it implements a fall back solution), but I'll have to look into it thoroughly to fix the Autoconf checks (maybe checking the OS version) and conditionally add that source file to the source list. I'll take care of that in the next update. Thanks again, -- Enrico -- Ticket URL: <https://trac.macports.org/ticket/44705#comment:10> MacPorts <http://www.macports.org/> Ports system for OS X