[Clamav-devel] 0.98.1 not compiling on OS/X Mavericks

Mark Allan markjallan at gmail.com
Wed Mar 19 05:29:45 EDT 2014


>>>>> It used to compile on OSX just fine as recently as a month ago.
>>>>> 
>>>>> I haven't built from source manually in a while but it does 0.98.1 did
>>>> build for me using MacPorts on Mavericks back in January. That was XCode 5
>>>> but not 5.1. MacPorts builds with CFLAGS -O0.
>>>> 
>>>> I can confirm that the update from xcode 5 to 5.1 broke the compilation
>>>> on Mac OS X.
>>>> 
>>>> Remi
>>>> _______________________________________________
>>>> http://lurker.clamav.net/list/clamav-devel.html
>>>> Please submit your patches to our Bugzilla: http://bugs.clamav.net
>>>> 
>>> 
>>> Thanks for the research on this problem. I added this to our Bugzilla as
>>> bug # 10757 so we can track it.
>>> 
>>> Dave R.
>>> 
>>> --
>>> ---
>>> Dave Raynor
>>> Vulnerability Research Team
>>> 
>> 
>> This error is reported from upstream LLVM code. The LLVM team has made
>> bigger changes to this header since this file was included in ClamAV, so I
>> cannot simply apply changes from them or the patch impact increases beyond
>> this file.
>> 
>> The root problem is the handling of the iterators and templates in this one
>> spot. In short, clang is checking something earlier than gcc, even though
>> the type should be available in the end.
>> 
>> Please try this candidate patch to the LoopInfo.h header.
>> 
>> --- a/libclamav/c++/llvm/include/llvm/Analysis/LoopInfo.h
>> +++ b/libclamav/c++/llvm/include/llvm/Analysis/LoopInfo.h
>> @@ -814,8 +814,12 @@ public:
>>        typedef GraphTraits<Inverse<BlockT*> > InvBlockTraits;
>> 
>>        // Add all of the predecessors of X to the end of the work stack...
>> -        TodoStack.insert(TodoStack.end(), InvBlockTraits::child_begin(X),
>> -                         InvBlockTraits::child_end(X));
>> +        for (typename InvBlockTraits::ChildIteratorType PI =
>> +              InvBlockTraits::child_begin(X), PE =
>> InvBlockTraits::child_end(X);
>> +              PI != PE; ++PI) {
>> +          typename InvBlockTraits::NodeType *N = *PI;
>> +          TodoStack.push_back(N);
>> +        }
>>      }
>>    }
>> 
>> Dealing with a larger LLVM upgrade is a task for a future release, but this
>> should let you move forward under Xcode 5.1 in the near term.
>> 
>> Let us know how it goes,
>> 
>> Dave R.

Another workaround is to compile with support for older versions of OS X.  I routinely compile with support for OSX 10.6+ and was confused when I saw the original email as I compiled under 10.9.2 and Xcode 5.1 a couple of days ago without any issue.

Here's what I use to configure the build:

CFLAGS="-O2 -g -D_FILE_OFFSET_BITS=64 -mmacosx-version-min=10.6 -arch x86_64" CXXFLAGS="-O2 -g -D_FILE_OFFSET_BITS=64 -mmacosx-version-min=10.6  -arch x86_64" ./configure --disable-dependency-tracking  --enable-llvm --enable-clamdtop --with-user=_clamav --with-group=_clamav --enable-all-jit-targets

If I get rid of mmacosx-version flag, the build fails.  If I set it to any valid value (e.g. 10.8), it works.

Mark




More information about the clamav-devel mailing list