Commit cb7487b1 authored by Bill Hoffman's avatar Bill Hoffman
Browse files

ENH: merge in from main tree RC 15

parent 558a57a7
......@@ -354,7 +354,7 @@ ENDMACRO (CMAKE_BUILD_UTILITIES)
SET(CMake_VERSION_MAJOR 2)
SET(CMake_VERSION_MINOR 6)
SET(CMake_VERSION_PATCH 1)
SET(CMake_VERSION_RC 14)
SET(CMake_VERSION_RC 15)
# CVS versions are odd, if this is an odd minor version
# then set the CMake_VERSION_DATE variable
IF("${CMake_VERSION_MINOR}" MATCHES "[13579]$")
......
Changes in CMake 2.6.1 RC 15
- Fix bug 7426 FindJPEG module causes error when setting JPEG_LIBRARY to blank
- Fix bug 7414 PackageMaker generator crashes when given components
with circular dependencies
- Fix source files to not add extra /, and look for extensions for
all enabled languages.
- Change link line to preserve input given to target_link_libraries even
if a shared library is repeated.
- Fix for bug 7421, fortran did not get arch flags on the mac
- For CMP0008 do not depend on the files that are not there, which
makes the Xcode generator delete executables after they are built.
- Work around Boost 1.36.0 bug fix on Darwin by setting the mangled
compiler name to -xgccVERSION
- Updated FindImageMagick to:
- Find newer additions such as animate, compare, etc.
- Find development api: Magick++, MagickCore, MagickWand
- Use FindPackageHandleStandardArgs to output standard messages.
Changes in CMake 2.6.1 RC 14
- Change dashboard submission to go directly to CDash.
- Add policy CMP0008- Full-path libraries must be a valid library file name
Changes in CMake 2.6.1 RC 12
- More find locations for FindJNI.
- Fix bug with source files ending in .l and .l.cpp, causing cmake
......
......@@ -364,25 +364,37 @@ ELSE (_boost_IN_CACHE)
SET (_boost_COMPILER "-mgw${_boost_COMPILER_VERSION}")
ENDIF(MINGW)
IF (UNIX)
IF (APPLE)
# Due to a quirk in Boost.Build, there is no compiler name
# mangled into library names on Mac OS X/Darwin.
SET (_boost_COMPILER "")
ELSE (APPLE)
IF (NOT CMAKE_COMPILER_IS_GNUCC)
# We assume that we have the Intel compiler.
SET (_boost_COMPILER "-il")
ELSE (NOT CMAKE_COMPILER_IS_GNUCC)
# Determine which version of GCC we have.
EXEC_PROGRAM(${CMAKE_CXX_COMPILER}
ARGS -dumpversion
OUTPUT_VARIABLE _boost_COMPILER_VERSION
IF (NOT CMAKE_COMPILER_IS_GNUCC)
# We assume that we have the Intel compiler.
SET (_boost_COMPILER "-il")
ELSE (NOT CMAKE_COMPILER_IS_GNUCC)
# Determine which version of GCC we have.
EXEC_PROGRAM(${CMAKE_CXX_COMPILER}
ARGS -dumpversion
OUTPUT_VARIABLE _boost_COMPILER_VERSION
)
STRING(REGEX REPLACE "([0-9])\\.([0-9])\\.[0-9]" "\\1\\2"
_boost_COMPILER_VERSION ${_boost_COMPILER_VERSION})
STRING(REGEX REPLACE "([0-9])\\.([0-9])\\.[0-9]" "\\1\\2"
_boost_COMPILER_VERSION ${_boost_COMPILER_VERSION})
IF(APPLE)
IF(Boost_MINOR_VERSION)
IF(${Boost_MINOR_VERSION} GREATER 35)
# In Boost 1.36.0 and newer, the mangled compiler name used
# on Mac OS X/Darwin is "xgcc".
SET(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}")
ELSE(${Boost_MINOR_VERSION} GREATER 35)
# In Boost <= 1.35.0, there is no mangled compiler name for
# the Mac OS X/Darwin version of GCC.
SET(_boost_COMPILER "")
ENDIF(${Boost_MINOR_VERSION} GREATER 35)
ELSE(Boost_MINOR_VERSION)
# We don't know the Boost version, so assume it's
# pre-1.36.0.
SET(_boost_COMPILER "")
ENDIF(Boost_MINOR_VERSION)
ELSE()
SET (_boost_COMPILER "-gcc${_boost_COMPILER_VERSION}")
ENDIF (NOT CMAKE_COMPILER_IS_GNUCC)
ENDIF (APPLE)
ENDIF()
ENDIF (NOT CMAKE_COMPILER_IS_GNUCC)
ENDIF(UNIX)
SET (_boost_MULTITHREADED "-mt")
......
# - Find Image Magick
# This module finds if ImageMagick tools are installed and determines
# where the executables are. This code sets the following variables:
# - Find the ImageMagick binary suite.
# This module will search for a set of ImageMagick tools specified
# as components in the FIND_PACKAGE call. Typical components include,
# but are not limited to (future versions of ImageMagick might have
# additional components not listed here):
#
# IMAGEMAGICK_CONVERT_EXECUTABLE =
# the full path to the 'convert' utility
# IMAGEMAGICK_MOGRIFY_EXECUTABLE =
# the full path to the 'mogrify' utility
# IMAGEMAGICK_IMPORT_EXECUTABLE =
# the full path to the 'import' utility
# IMAGEMAGICK_MONTAGE_EXECUTABLE =
# the full path to the 'montage' utility
# IMAGEMAGICK_COMPOSITE_EXECUTABLE =
# the full path to the 'composite' utility
# animate
# compare
# composite
# conjure
# convert
# display
# identify
# import
# mogrify
# montage
# stream
#
# If no component is specified in the FIND_PACKAGE call, then it only
# searches for the ImageMagick executable directory. This code defines
# the following variables:
#
# ImageMagick_FOUND - TRUE if all components are found.
# ImageMagick_EXECUTABLE_DIR - Full path to executables directory.
# ImageMagick_<component>_FOUND - TRUE if <component> is found.
# ImageMagick_<component>_EXECUTABLE - Full path to <component> executable.
#
# There are also components for the following ImageMagick APIs:
#
# Magick++
# MagickWand
# Magick
#
# For these components the following variables are set:
#
# ImageMagick_FOUND - TRUE if all components are found.
# ImageMagick_INCLUDE_DIRS - Full paths to all include dirs.
# ImageMagick_LIBRARIES - Full paths to all libraries.
# ImageMagick_<component>_FOUND - TRUE if <component> is found.
# ImageMagick_<component>_INCLUDE_DIRS - Full path to <component> include dirs.
# ImageMagick_<component>_LIBRARIES - Full path to <component> libraries.
#
# Example Usages:
# FIND_PACKAGE(ImageMagick)
# FIND_PACKAGE(ImageMagick COMPONENTS convert)
# FIND_PACKAGE(ImageMagick COMPONENTS convert mogrify display)
# FIND_PACKAGE(ImageMagick COMPONENTS Magick++)
# FIND_PACKAGE(ImageMagick COMPONENTS Magick++ convert)
#
# Note that the standard FIND_PACKAGE features are supported
# (i.e., QUIET, REQUIRED, etc.).
IF (WIN32)
# Copyright (c) 2007-2008,
# Miguel A. Figueroa-Villanueva, miguelf at ieee dot org.
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
# Try to find the ImageMagick binary path.
#---------------------------------------------------------------------
# Helper functions
#---------------------------------------------------------------------
FUNCTION(FIND_IMAGEMAGICK_API component header)
SET(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE)
FIND_PATH(IMAGEMAGICK_BINARY_PATH mogrify.exe
[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]
DOC "Path to the ImageMagick binary directory where all executable should be found."
)
FIND_PATH(ImageMagick_${component}_INCLUDE_DIR
NAMES ${header}
PATHS
${ImageMagick_INCLUDE_DIRS}
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/include"
PATH_SUFFIXES
ImageMagick
DOC "Path to the ImageMagick include dir."
)
FIND_LIBRARY(ImageMagick_${component}_LIBRARY
NAMES ${ARGN}
PATHS
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/lib"
DOC "Path to the ImageMagick Magick++ library."
)
# Be extra-careful here: we do NOT want CMake to look in the system's PATH
# env var to search for convert.exe, otherwise it is going to pick
# Window's own convert.exe, and you may say good-bye to your disk.
IF(ImageMagick_${component}_INCLUDE_DIR AND ImageMagick_${component}_LIBRARY)
SET(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE)
FIND_PROGRAM(IMAGEMAGICK_CONVERT_EXECUTABLE
NAMES convert
PATHS ${IMAGEMAGICK_BINARY_PATH}
NO_SYSTEM_PATH
DOC "Path to ImageMagick's convert executable. WARNING: note that this tool, named convert.exe, conflicts with Microsoft Window's own convert.exe, which is used to convert FAT partitions to NTFS format ! Therefore, be extra-careful and make sure the right convert.exe has been picked."
)
LIST(APPEND ImageMagick_INCLUDE_DIRS
${ImageMagick_${component}_INCLUDE_DIR}
)
LIST(REMOVE_DUPLICATES ImageMagick_INCLUDE_DIRS)
SET(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS} PARENT_SCOPE)
ELSE (WIN32)
LIST(APPEND ImageMagick_LIBRARIES
${ImageMagick_${component}_LIBRARY}
)
SET(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES} PARENT_SCOPE)
ENDIF(ImageMagick_${component}_INCLUDE_DIR AND ImageMagick_${component}_LIBRARY)
ENDFUNCTION(FIND_IMAGEMAGICK_API)
SET (IMAGEMAGICK_BINARY_PATH "")
FUNCTION(FIND_IMAGEMAGICK_EXE component)
SET(_IMAGEMAGICK_EXECUTABLE
${ImageMagick_EXECUTABLE_DIR}/${component}${CMAKE_EXECUTABLE_SUFFIX})
IF(EXISTS ${_IMAGEMAGICK_EXECUTABLE})
SET(ImageMagick_${component}_EXECUTABLE
${_IMAGEMAGICK_EXECUTABLE}
PARENT_SCOPE
)
SET(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE)
ELSE(EXISTS ${_IMAGEMAGICK_EXECUTABLE})
SET(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE)
ENDIF(EXISTS ${_IMAGEMAGICK_EXECUTABLE})
ENDFUNCTION(FIND_IMAGEMAGICK_EXE)
FIND_PROGRAM(IMAGEMAGICK_CONVERT_EXECUTABLE
NAMES convert
PATHS ${IMAGEMAGICK_BINARY_PATH}
DOC "Path to ImageMagick's convert executable."
#---------------------------------------------------------------------
# Start Actual Work
#---------------------------------------------------------------------
# Try to find a ImageMagick installation binary path.
FIND_PATH(ImageMagick_EXECUTABLE_DIR
NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX}
PATHS
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]"
DOC "Path to the ImageMagick binary directory."
NO_DEFAULT_PATH
)
FIND_PATH(ImageMagick_EXECUTABLE_DIR
NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX}
)
ENDIF (WIN32)
# Find mogrify, import, montage, composite
FIND_PROGRAM(IMAGEMAGICK_MOGRIFY_EXECUTABLE
NAMES mogrify
PATHS ${IMAGEMAGICK_BINARY_PATH}
DOC "Path to ImageMagick's mogrify executable."
)
FIND_PROGRAM(IMAGEMAGICK_IMPORT_EXECUTABLE
NAMES import
PATHS ${IMAGEMAGICK_BINARY_PATH}
DOC "Path to ImageMagick's import executable."
)
# Find each component. Search for all tools in same dir
# <ImageMagick_EXECUTABLE_DIR>; otherwise they should be found
# independently and not in a cohesive module such as this one.
SET(ImageMagick_FOUND TRUE)
FOREACH(component ${ImageMagick_FIND_COMPONENTS}
# DEPRECATED: forced components for backward compatibility
convert mogrify import montage composite
)
IF(component STREQUAL "Magick++")
FIND_IMAGEMAGICK_API(Magick++ Magick++.h
Magick++ CORE_RL_Magick++_
)
ELSEIF(component STREQUAL "MagickWand")
FIND_IMAGEMAGICK_API(MagickWand wand/MagickWand.h
Wand MagickWand CORE_RL_wand_
)
ELSEIF(component STREQUAL "MagickCore")
FIND_IMAGEMAGICK_API(MagickCore magick/MagickCore.h
Magick MagickCore CORE_RL_magick_
)
ELSE(component STREQUAL "Magick++")
IF(ImageMagick_EXECUTABLE_DIR)
FIND_IMAGEMAGICK_EXE(${component})
ENDIF(ImageMagick_EXECUTABLE_DIR)
ENDIF(component STREQUAL "Magick++")
IF(NOT ImageMagick_${component}_FOUND)
LIST(FIND ImageMagick_FIND_COMPONENTS ${component} is_requested)
IF(is_requested GREATER -1)
SET(ImageMagick_FOUND FALSE)
ENDIF(is_requested GREATER -1)
ENDIF(NOT ImageMagick_${component}_FOUND)
ENDFOREACH(component)
FIND_PROGRAM(IMAGEMAGICK_MONTAGE_EXECUTABLE
NAMES montage
PATHS ${IMAGEMAGICK_BINARY_PATH}
DOC "Path to ImageMagick's montage executable."
)
SET(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS})
SET(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES})
FIND_PROGRAM(IMAGEMAGICK_COMPOSITE_EXECUTABLE
NAMES composite
PATHS ${IMAGEMAGICK_BINARY_PATH}
DOC "Path to ImageMagick's composite executable."
)
#---------------------------------------------------------------------
# Standard Package Output
#---------------------------------------------------------------------
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
ImageMagick DEFAULT_MSG ImageMagick_FOUND
)
# Maintain consistency with all other variables.
SET(ImageMagick_FOUND ${IMAGEMAGICK_FOUND})
#---------------------------------------------------------------------
# DEPRECATED: Setting variables for backward compatibility.
#---------------------------------------------------------------------
SET(IMAGEMAGICK_BINARY_PATH ${ImageMagick_EXECUTABLE_DIR}
CACHE PATH "Path to the ImageMagick binary directory.")
SET(IMAGEMAGICK_CONVERT_EXECUTABLE ${ImageMagick_convert_EXECUTABLE}
CACHE FILEPATH "Path to ImageMagick's convert executable.")
SET(IMAGEMAGICK_MOGRIFY_EXECUTABLE ${ImageMagick_mogrify_EXECUTABLE}
CACHE FILEPATH "Path to ImageMagick's mogrify executable.")
SET(IMAGEMAGICK_IMPORT_EXECUTABLE ${ImageMagick_import_EXECUTABLE}
CACHE FILEPATH "Path to ImageMagick's import executable.")
SET(IMAGEMAGICK_MONTAGE_EXECUTABLE ${ImageMagick_montage_EXECUTABLE}
CACHE FILEPATH "Path to ImageMagick's montage executable.")
SET(IMAGEMAGICK_COMPOSITE_EXECUTABLE ${ImageMagick_composite_EXECUTABLE}
CACHE FILEPATH "Path to ImageMagick's composite executable.")
MARK_AS_ADVANCED(
IMAGEMAGICK_BINARY_PATH
IMAGEMAGICK_CONVERT_EXECUTABLE
......@@ -79,4 +192,4 @@ MARK_AS_ADVANCED(
IMAGEMAGICK_IMPORT_EXECUTABLE
IMAGEMAGICK_MONTAGE_EXECUTABLE
IMAGEMAGICK_COMPOSITE_EXECUTABLE
)
)
......@@ -23,6 +23,8 @@ ENDIF(JPEG_FOUND)
# Deprecated declarations.
SET (NATIVE_JPEG_INCLUDE_PATH ${JPEG_INCLUDE_DIR} )
GET_FILENAME_COMPONENT (NATIVE_JPEG_LIB_PATH ${JPEG_LIBRARY} PATH)
IF(JPEG_LIBRARY)
GET_FILENAME_COMPONENT (NATIVE_JPEG_LIB_PATH ${JPEG_LIBRARY} PATH)
ENDIF(JPEG_LIBRARY)
MARK_AS_ADVANCED(JPEG_LIBRARY JPEG_INCLUDE_DIR )
......@@ -829,8 +829,10 @@ cmCPackPackageMakerGenerator::CreateChoice(const cmCPackComponent& component,
// on (B and A), while selecting something that depends on C--either D
// or E--will automatically cause C to get selected.
out << "selected=\"my.choice.selected";
AddDependencyAttributes(component, out);
AddReverseDependencyAttributes(component, out);
std::set<const cmCPackComponent *> visited;
AddDependencyAttributes(component, visited, out);
visited.clear();
AddReverseDependencyAttributes(component, visited, out);
out << "\"";
}
out << ">" << std::endl;
......@@ -868,15 +870,23 @@ cmCPackPackageMakerGenerator::CreateChoice(const cmCPackComponent& component,
//----------------------------------------------------------------------
void
cmCPackPackageMakerGenerator::
AddDependencyAttributes(const cmCPackComponent& component, cmOStringStream& out)
AddDependencyAttributes(const cmCPackComponent& component,
std::set<const cmCPackComponent *>& visited,
cmOStringStream& out)
{
if (visited.find(&component) != visited.end())
{
return;
}
visited.insert(&component);
std::vector<cmCPackComponent *>::const_iterator dependIt;
for (dependIt = component.Dependencies.begin();
dependIt != component.Dependencies.end();
++dependIt)
{
out << " &amp;&amp; choices['" << (*dependIt)->Name << "Choice'].selected";
AddDependencyAttributes(**dependIt, out);
AddDependencyAttributes(**dependIt, visited, out);
}
}
......@@ -884,15 +894,22 @@ AddDependencyAttributes(const cmCPackComponent& component, cmOStringStream& out)
void
cmCPackPackageMakerGenerator::
AddReverseDependencyAttributes(const cmCPackComponent& component,
std::set<const cmCPackComponent *>& visited,
cmOStringStream& out)
{
if (visited.find(&component) != visited.end())
{
return;
}
visited.insert(&component);
std::vector<cmCPackComponent *>::const_iterator dependIt;
for (dependIt = component.ReverseDependencies.begin();
dependIt != component.ReverseDependencies.end();
++dependIt)
{
out << " || choices['" << (*dependIt)->Name << "Choice'].selected";
AddReverseDependencyAttributes(**dependIt, out);
AddReverseDependencyAttributes(**dependIt, visited, out);
}
}
......
......@@ -88,12 +88,15 @@ protected:
// Subroutine of WriteDistributionFile that writes out the
// dependency attributes for inter-component dependencies.
void AddDependencyAttributes(const cmCPackComponent& component,
std::set<const cmCPackComponent *>& visited,
cmOStringStream& out);
// Subroutine of WriteDistributionFile that writes out the
// reverse dependency attributes for inter-component dependencies.
void AddReverseDependencyAttributes(const cmCPackComponent& component,
cmOStringStream& out);
void
AddReverseDependencyAttributes(const cmCPackComponent& component,
std::set<const cmCPackComponent *>& visited,
cmOStringStream& out);
// Generates XML that encodes the hierarchy of component groups and
// their components in a form that can be used by distribution
......
......@@ -24,7 +24,6 @@
#include "cmake.h"
#include <cmsys/stl/algorithm>
#include <cmsys/RegularExpression.hxx>
#include <assert.h>
......@@ -198,12 +197,6 @@ void cmComputeLinkDepends::SetOldLinkDirMode(bool b)
this->OldLinkDirMode = b;
}
//----------------------------------------------------------------------------
void cmComputeLinkDepends::SetSharedRegex(std::string const& regex)
{
this->SharedRegexString = regex;
}
//----------------------------------------------------------------------------
std::vector<cmComputeLinkDepends::LinkEntry> const&
cmComputeLinkDepends::Compute()
......@@ -881,9 +874,6 @@ void cmComputeLinkDepends::CheckWrongConfigItem(std::string const& item)
//----------------------------------------------------------------------------
void cmComputeLinkDepends::PreserveOriginalEntries()
{
// Regular expression to match shared libraries.
cmsys::RegularExpression shared_lib(this->SharedRegexString.c_str());
// Skip the part of the input sequence that already appears in the
// output.
std::vector<int>::const_iterator in = this->OriginalEntries.begin();
......@@ -892,8 +882,7 @@ void cmComputeLinkDepends::PreserveOriginalEntries()
out != this->FinalLinkOrder.end())
{
cmTarget* tgt = this->EntryList[*in].Target;
if((tgt && tgt->GetType() != cmTarget::STATIC_LIBRARY) ||
(!tgt && shared_lib.find(this->EntryList[*in].Item)))
if(tgt && tgt->GetType() != cmTarget::STATIC_LIBRARY)
{
// Skip input items known to not be static libraries.
++in;
......@@ -916,8 +905,7 @@ void cmComputeLinkDepends::PreserveOriginalEntries()
while(in != this->OriginalEntries.end())
{
cmTarget* tgt = this->EntryList[*in].Target;
if((tgt && tgt->GetType() != cmTarget::STATIC_LIBRARY) ||
(!tgt && shared_lib.find(this->EntryList[*in].Item)))
if(tgt && tgt->GetType() != cmTarget::STATIC_LIBRARY)
{
// Skip input items known to not be static libraries.
++in;
......
......@@ -58,10 +58,6 @@ public:
std::set<cmTarget*> const& GetOldWrongConfigItems() const
{ return this->OldWrongConfigItems; }
/** Set a regular expression that matches strings ending in a shared
library extension. */
void SetSharedRegex(std::string const& regex);
private:
// Context information.
......@@ -141,7 +137,6 @@ private:
// Preservation of original link line.
std::vector<int> OriginalEntries;
void PreserveOriginalEntries();
std::string SharedRegexString;
// Compatibility help.
bool OldLinkDirMode;
......
......@@ -256,10 +256,10 @@ cmComputeLinkInformation
// Allocate internals.
this->OrderLinkerSearchPath =
new cmOrderDirectories(this->GlobalGenerator, target->GetName(),
new cmOrderDirectories(this->GlobalGenerator, target,
"linker search path");
this->OrderRuntimeSearchPath =
new cmOrderDirectories(this->GlobalGenerator, target->GetName(),
new cmOrderDirectories(this->GlobalGenerator, target,
"runtime search path");
this->OrderDependentRPath = 0;
......@@ -362,7 +362,7 @@ cmComputeLinkInformation
{
this->SharedDependencyMode = SharedDepModeDir;
this->OrderDependentRPath =
new cmOrderDirectories(this->GlobalGenerator, target->GetName(),
new cmOrderDirectories(this->GlobalGenerator, target,
"dependent library path");
}
......@@ -511,7 +511,6 @@ bool cmComputeLinkInformation::Compute()
// Compute the ordered link line items.
cmComputeLinkDepends cld(this->Target, this->Config);
cld.SetOldLinkDirMode(this->OldLinkDirMode);
cld.SetSharedRegex(this->SharedRegexString);
cmComputeLinkDepends::EntryVector const& linkEntries = cld.Compute();
// Add the link line items.
......@@ -1131,6 +1130,10 @@ bool cmComputeLinkInformation::CheckImplicitDirItem(std::string const& item)
// portion. This will allow the system linker to locate the proper
// library for the architecture at link time.
this->AddUserItem(file, false);
// Make sure the link directory ordering will find the library.
this->OrderLinkerSearchPath->AddLinkLibrary(item);
return true;
}
......@@ -1362,6 +1365,14 @@ void cmComputeLinkInformation::AddSharedLibNoSOName(std::string const& item)
void cmComputeLinkInformation::HandleBadFullItem(std::string const& item,
std::string const& file)
{
// Do not depend on things that do not exist.
std::vector<std::string>::iterator i =
std::find(this->Depends.begin(), this->Depends.end(), item);
if(i != this->Depends.end())
{
this->Depends.erase(i);
}
// Tell the linker to search for the item and provide the proper
// path for it. Do not contribute to any CMP0003 warning (do not
// put in OldLinkDirItems or OldUserFlagItems).
......
......@@ -1630,7 +1630,7 @@ void cmLocalGenerator::AddLanguageFlags(std::string& flags,
const char* sysrootDefault =
this->Makefile->GetDefinition("CMAKE_OSX_SYSROOT_DEFAULT");
bool flagsUsed = false;
if(osxArch && sysroot && lang && lang[0] =='C')
if(osxArch && sysroot && lang && (lang[0] =='C' || lang[0] == 'F'))
{
std::vector<std::string> archs;
cmSystemTools::ExpandListArgument(std::string(osxArch),
......
......@@ -18,6 +18,7 @@
#include "cmGlobalGenerator.h"
#include "cmSystemTools.h"
#include "cmake.h"
#include <assert.h>
......@@ -56,7 +57,7 @@ public:
{
for(unsigned int i=0; i < this->OD->OriginalDirectories.size(); ++i)
{
// Check if this directory conflicts with they entry.
// Check if this directory conflicts with the entry.
std::string const& dir = this->OD->OriginalDirectories[i];
if(dir != this->Directory && this->FindConflict(dir))
{
......@@ -68,6 +69,29 @@ public:
}
}
}
void FindImplicitConflicts(cmOStringStream& w)
{
bool first = true;
for(unsigned int i=0; i < this->OD->OriginalDirectories.size(); ++i)
{
// Check if this directory conflicts with the entry.
std::string const& dir = this->OD->OriginalDirectories[i];
if(dir != this->Directory && this->FindConflict(dir))
{
// The library will be found in this directory but it is
// supposed to be found in an implicit search directory.
if(first)
{
first = false;
w << " ";
this->Report(w);
w << " in " << this->Directory << " may be hidden by files in:\n";
}
w << " " << dir << "\n";
}
}
}
protected:
virtual bool FindConflict(std::string const& dir) = 0;