On 4 Apr 2014, at 13:13, Baptiste Daroussin <b...@freebsd.org> wrote:

> On Fri, Apr 04, 2014 at 04:08:13PM +0400, Boris Samorodov wrote:
>> 04.04.2014 15:49, Baptiste Daroussin пишет:
>>> On Fri, Apr 04, 2014 at 02:18:15PM +0400, Boris Samorodov wrote:
>>>> 04.04.2014 12:07, Anton Shterenlikht пишет:
>>>>> 
>>>>> http://www.freebsd.org/cgi/query-pr.cgi?pr=188161
>>>>> 
>>>>> Compiling adminutil.c...
>>>>> cc  -Wall -Wno-format-y2k -Wunused -fPIC -Os -g -fstack-protector -I.. 
>>>>> -D_CUPS_SOURCE -I/usr/local/include -O2 -pipe  -fno-strict-aliasing 
>>>>> -DOPENSSL_DISABLE_OLD_DES_SUPPORT -D_LARGEFILE_SOURCE  -D_THREAD_SAFE 
>>>>> -D_REENTRANT -D_CUPS_NO_DEPRECATED=1 -D_PPD_DEPRECATED="" -c -o 
>>>>> adminutil.o adminutil.c
>>>>> adminutil.c:1: warning: -fstack-protector not supported for this target
>>>>> In file included from pwg-private.h:25,
>>>>>                 from cups-private.h:31,
>>>>>                 from adminutil.c:33:
>>>>> ../cups/cups.h:34:35: error: dispatch/dispatch.h: No such file or 
>>>>> directory
>>>> 
>>>> Hm. cups/cups.h has the following code:
>>>> -----
>>>> #  ifdef __BLOCKS__
>>>> #    include <dispatch/dispatch.h>
>>>> #  endif /* __BLOCKS__ */
>>>> -----
>>>> 
>>>> It seems that the whole dispath is an Apple thing. How does it come
>>>> about that it get used by FreeBSD? I think this check may be removed.
>>>> 
>>>> Anyway please try the following patch (place it in to the
>>>> print/cups/file directory -- mind print/cups origin,
>>>> not print/cups-client) and retry:
>>>> ftp://ftp.wart.ru/pub/misc/patch-cups-cups.h
>>>> 
>>> 
>>> That is on recent head, due to the import of _BLOCKS_ support but we don't 
>>> have
>>> libdispatch
>> 
>> Makes sense, thanks.
>> 
>> Wait a little, I don't get any defines:
>> -----
>> % uname -a
>> FreeBSD bb052.bsnet 11.0-CURRENT FreeBSD 11.0-CURRENT #77 r264083: Fri
>> Apr  4 00:30:01 SAMT 2014
>> bsam@bb052.bsnet:/usr/obj/usr/src/sys/BB64X  amd64
>> 
>> % grep __BLOCKS__ -r /usr/include
>> /usr/include/heimbase.h:#ifdef __BLOCKS__
>> /usr/include/heimbase.h:#ifdef __BLOCKS__
>> /usr/include/heimbase.h:#ifdef __BLOCKS__
>> /usr/include/stdlib.h:#ifdef __BLOCKS__
>> /usr/include/stdlib.h:#ifdef __BLOCKS__
>> /usr/include/stdlib.h:#ifdef __BLOCKS__
>> /usr/include/stdlib.h:#ifdef __BLOCKS__
>> /usr/include/hx509-protos.h:#ifdef __BLOCKS__
>> /usr/include/hx509-protos.h:#endif /* __BLOCKS__ */
>> /usr/include/dirent.h:#ifdef __BLOCKS__
>> -----
>> 
> 
> The compilers defines it, this is probably due to using gcc on ia64, 
> I'm CCing Pedro and David on this as the are the guilty one about __BLOCKS__
> support :) and may know better

$ echo | clang -dM -x c - -E | grep BLOCK
$ echo | clang -fblocks -dM -x c - -E | grep BLOCK
#define __BLOCKS__ 1
$ echo | gcc  -dM -x c - -E | grep BLOCK
#define __BLOCKS__ 1
$ echo | gcc -fno-blocks -dM -x c - -E | grep BLOCK

It's an inconsistency between base gcc and base clang: one defaults to 
supporting blocks, the other defaults to not supporting them.  I'd like to 
blame Pedro, but actually I think the base-system bug is that is that clang 
doesn't default to -fblocks behaviour.

So, the simplest fix is simply to add -fno-blocks to the CFLAGS for this port.  
Given that it has libdispatch support, however, it would be nice if we could 
have an option for using libdispatch that would (as well as passing the correct 
configure options and so on) add -fblocks to CFLAGS if building with 
libdispatch and -fn-blocks otherwise.

It would also be nice to tell the cups developers that it's not particularly 
clever to use the existence of a compiler feature to test for the presence of a 
library.  They seem to have come up with an interesting spelling of #ifdef 
__APPLE__, rather than adding a proper configure check.  

If we've got a baseline, the attached diff enables blocks support by default in 
clang and so an exprun can see how many ports break by assuming that blocks 
support means libdispatch / Cocoa / OS X...

David

Index: contrib/llvm/tools/clang/lib/Driver/ToolChains.h
===================================================================
--- contrib/llvm/tools/clang/lib/Driver/ToolChains.h    (revision 263972)
+++ contrib/llvm/tools/clang/lib/Driver/ToolChains.h    (working copy)
@@ -519,6 +519,8 @@
     return Generic_ELF::IsIntegratedAssemblerDefault();
   }
 
+  virtual bool IsBlocksDefault() const { return true; }
+
   virtual bool UseSjLjExceptions() const;
 protected:
   virtual Tool *buildAssembler() const;

_______________________________________________
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"

Reply via email to