[Cmake-commits] CMake branch, next, updated. v2.8.5-1541-gdbdd8ec

Alexander Neundorf neundorf at kde.org
Sat Aug 13 17:13:49 EDT 2011


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  dbdd8ec53e935a67bf9f60964f3971e0c76eecea (commit)
       via  fd15b5e1c425b0e2cb418e87a115215b0aa7501a (commit)
       via  9fc87c6343a5d448f04d7a9397beb95e3b85178e (commit)
       via  d3ae0fff7dea00775f8c6e8bed59a494f102999c (commit)
       via  bf0737526419936915a9f2c14f06bff556d1fcd4 (commit)
       via  b0e357824c0ddf1a57db7742da3d5f3f90af97d2 (commit)
       via  53edfb206b549f0dd5a014aac054ca82d865bbcd (commit)
       via  b8fdaa1d662b01a167c94f2a9a9efec9dd0ea2d0 (commit)
       via  7690edffd9801c41dcfa4ef2a6213d4883e55c83 (commit)
       via  e4f603b698a13857e79a5f6df18a7461b20d4bd4 (commit)
       via  a91d662f46fd2781fc5a3b73c2d244ac6dc2a343 (commit)
       via  b976e70063008c0633cb5dd4ecb1f40278c67935 (commit)
      from  f864aa4885c1e40c88f77d02edac36402a2d6a36 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=dbdd8ec53e935a67bf9f60964f3971e0c76eecea
commit dbdd8ec53e935a67bf9f60964f3971e0c76eecea
Merge: f864aa4 fd15b5e
Author:     Alexander Neundorf <neundorf at kde.org>
AuthorDate: Sat Aug 13 17:13:42 2011 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Sat Aug 13 17:13:42 2011 -0400

    Merge topic 'UsingCMakeLikePkgConfig2' into next
    
    fd15b5e Only run the test if we are using a makefile generator under UNIX
    9fc87c6 Add a test for the new --find-package mode
    d3ae0ff Improve documentation for --find-package mode
    bf07375 Add a cmake.m4 for using cmake in autoconf projects instead of pkgconfig
    b0e3578 Use the file-utility to test for 64bit if there is no /usr/lib64
    53edfb2 Better support for lib64 and Debian multiarch
    b8fdaa1 Fix copyright notice in new CMakeFindPackageMode.cmake
    7690edf Replace cmake::GetScriptMode() with GetWorkingMode()
    e4f603b Implement find-package mode of cmake
    a91d662 Add find-package mode, which does nothing yet
    b976e70 Make clLocalGenerator::GetTargetFlags() public


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fd15b5e1c425b0e2cb418e87a115215b0aa7501a
commit fd15b5e1c425b0e2cb418e87a115215b0aa7501a
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Thu Aug 11 23:32:30 2011 +0200
Commit:     Alex Neundorf <neundorf at kde.org>
CommitDate: Thu Aug 11 23:34:25 2011 +0200

    Only run the test if we are using a makefile generator under UNIX
    
    Alex

diff --git a/Tests/FindPackageModeMakefileTest/CMakeLists.txt b/Tests/FindPackageModeMakefileTest/CMakeLists.txt
index 0be3783..f0faab9 100644
--- a/Tests/FindPackageModeMakefileTest/CMakeLists.txt
+++ b/Tests/FindPackageModeMakefileTest/CMakeLists.txt
@@ -8,7 +8,7 @@ if("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU
   find_package(PNG)
 
   # the test program links against the png lib, so test first whether it exists
-  if(PNG_FOUND)
+  if(PNG_FOUND  AND  UNIX  AND  "${CMAKE_GENERATOR}" MATCHES "Makefile")
 
     get_target_property(cmakeExecutable cmake LOCATION)
 

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9fc87c6343a5d448f04d7a9397beb95e3b85178e
commit 9fc87c6343a5d448f04d7a9397beb95e3b85178e
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Thu Aug 11 23:27:19 2011 +0200
Commit:     Alex Neundorf <neundorf at kde.org>
CommitDate: Thu Aug 11 23:34:17 2011 +0200

    Add a test for the new --find-package mode
    
    Alex

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 2ad9a77..a75b3df 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -46,6 +46,8 @@ IF(BUILD_TESTING)
 
   ADD_SUBDIRECTORY(CMakeLib)
 
+  ADD_SUBDIRECTORY(FindPackageModeMakefileTest)
+
   # Collect a list of all test build directories.
   SET(TEST_BUILD_DIRS)
 
diff --git a/Tests/FindPackageModeMakefileTest/CMakeLists.txt b/Tests/FindPackageModeMakefileTest/CMakeLists.txt
new file mode 100644
index 0000000..0be3783
--- /dev/null
+++ b/Tests/FindPackageModeMakefileTest/CMakeLists.txt
@@ -0,0 +1,22 @@
+
+if("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU
+  OR "${CMAKE_CXX_COMPILER_ID}" MATCHES Intel
+  OR "${CMAKE_CXX_COMPILER_ID}" MATCHES Clang
+  OR "${CMAKE_CXX_COMPILER_ID}" MATCHES XL
+  OR "${CMAKE_CXX_COMPILER_ID}" MATCHES SunPro)
+
+  find_package(PNG)
+
+  # the test program links against the png lib, so test first whether it exists
+  if(PNG_FOUND)
+
+    get_target_property(cmakeExecutable cmake LOCATION)
+
+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Makefile.in ${CMAKE_CURRENT_BINARY_DIR}/ConfMakefile @ONLY)
+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/main.cpp ${CMAKE_CURRENT_BINARY_DIR}/main.cpp COPYONLY)
+
+    add_test(FindPackageModeMakefileTest ${CMAKE_MAKE_PROGRAM} -f ${CMAKE_CURRENT_BINARY_DIR}/ConfMakefile -C ${CMAKE_CURRENT_BINARY_DIR} )
+
+  endif()
+
+endif()
diff --git a/Tests/FindPackageModeMakefileTest/Makefile.in b/Tests/FindPackageModeMakefileTest/Makefile.in
new file mode 100644
index 0000000..5105d99
--- /dev/null
+++ b/Tests/FindPackageModeMakefileTest/Makefile.in
@@ -0,0 +1,8 @@
+all: clean pngtest
+
+pngtest: main.o
+	"@CMAKE_CXX_COMPILER@" -c `"@cmakeExecutable@" --find-package -DNAME=PNG -DLANGUAGE=CXX -DCOMPILER_ID=@CMAKE_CXX_COMPILER_ID@ -DMODE=COMPILE` main.cpp
+	"@CMAKE_CXX_COMPILER@" -o pngtest main.o `"@cmakeExecutable@" --find-package -DNAME=PNG -DLANGUAGE=CXX -DCOMPILER_ID=@CMAKE_CXX_COMPILER_ID@ -DMODE=LINK`
+
+clean:
+	rm -f *.o pngtest
diff --git a/Tests/FindPackageModeMakefileTest/main.cpp b/Tests/FindPackageModeMakefileTest/main.cpp
new file mode 100644
index 0000000..b785427
--- /dev/null
+++ b/Tests/FindPackageModeMakefileTest/main.cpp
@@ -0,0 +1,8 @@
+#include <stdio.h>
+#include <png.h>
+
+int main()
+{
+ printf("PNG copyright: %s\n", png_get_copyright(NULL));
+ return 0;
+}

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d3ae0fff7dea00775f8c6e8bed59a494f102999c
commit d3ae0fff7dea00775f8c6e8bed59a494f102999c
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Wed Aug 10 02:05:33 2011 +0200
Commit:     Alex Neundorf <neundorf at kde.org>
CommitDate: Thu Aug 11 22:43:45 2011 +0200

    Improve documentation for --find-package mode
    
    Alex

diff --git a/Modules/CMakeFindPackageMode.cmake b/Modules/CMakeFindPackageMode.cmake
index 3e7376c..2ce4fe6 100644
--- a/Modules/CMakeFindPackageMode.cmake
+++ b/Modules/CMakeFindPackageMode.cmake
@@ -1,8 +1,12 @@
-# COMPILER_ID = GNU/Intel/Clang/MSVC, etc.
-# LANGUAGE = C/CXX/Fortan/ASM
-# MODE = EXIST/COMPILE/LINK
-# NAME = name of the package
-# QUIET = if TRUE, don't print anything
+# This file is executed by cmake when invoked with --find-package.
+# It expects that the following variables are set using -D:
+#   NAME = name of the package
+#   COMPILER_ID = the CMake compiler ID for which the result is, i.e. GNU/Intel/Clang/MSVC, etc.
+#   LANGUAGE = language for which the result will be used, i.e. C/CXX/Fortan/ASM
+#   MODE = EXIST : only check for existance of the given package
+#          COMPILE : print the flags needed for compiling an object file which uses the given package
+#          LINK : print the flags needed for linking when using the given package
+#   QUIET = if TRUE, don't print anything
 
 #=============================================================================
 # Copyright 2006-2011 Alexander Neundorf, <neundorf at kde.org>
@@ -18,7 +22,7 @@
 #  License text for the above reference.)
 
 if(NOT NAME)
-  message(FATAL_ERROR "NAME argument not specified.")
+  message(FATAL_ERROR "Name of the package to be searched not specified. Set the CMake variable NAME, e.g. -DNAME=JPEG .")
 endif()
 
 if(NOT COMPILER_ID)
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index c744dcd..828d2aa 100644
--- a/Source/cmakemain.cxx
+++ b/Source/cmakemain.cxx
@@ -104,7 +104,9 @@ static const char * cmDocumentationOptions[][3] =
    "before the -P argument."},
   {"--find-package", "Run in pkg-config like mode.",
    "Search a package using find_package() and print the resulting flags "
-   "to stdout. "},
+   "to stdout. This can be used to use cmake instead of pkg-config to find "
+   "installed libraries in plain Makefile-based projects or in "
+   "autoconf-based projects (via share/aclocal/cmake.m4)."},
   {"--graphviz=[file]", "Generate graphviz of dependencies.",
    "Generate a graphviz input file that will contain all the library and "
    "executable dependencies in the project."},

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=bf0737526419936915a9f2c14f06bff556d1fcd4
commit bf0737526419936915a9f2c14f06bff556d1fcd4
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Wed Aug 10 01:51:38 2011 +0200
Commit:     Alex Neundorf <neundorf at kde.org>
CommitDate: Thu Aug 11 22:43:33 2011 +0200

    Add a cmake.m4 for using cmake in autoconf projects instead of pkgconfig
    
    This file has been written today from scratch by Matthias Kretz
    and it BSD-licensed.
    
    Alex

diff --git a/Modules/CMakeFindPackageMode.cmake b/Modules/CMakeFindPackageMode.cmake
index 3e5cb49..3e7376c 100644
--- a/Modules/CMakeFindPackageMode.cmake
+++ b/Modules/CMakeFindPackageMode.cmake
@@ -1,4 +1,4 @@
-# COMPILER_ID = GNU/Intel/etc.
+# COMPILER_ID = GNU/Intel/Clang/MSVC, etc.
 # LANGUAGE = C/CXX/Fortan/ASM
 # MODE = EXIST/COMPILE/LINK
 # NAME = name of the package
diff --git a/Utilities/CMakeLists.txt b/Utilities/CMakeLists.txt
index 8b3e7f6..85db367 100644
--- a/Utilities/CMakeLists.txt
+++ b/Utilities/CMakeLists.txt
@@ -126,6 +126,7 @@ ADD_CUSTOM_COMMAND(
 
 INSTALL_FILES(${CMAKE_MAN_DIR}/man1 FILES ${MAN_FILES})
 INSTALL_FILES(${CMAKE_DOC_DIR} FILES ${HTML_FILES} ${TEXT_FILES})
+INSTALL_FILES(share/aclocal FILES cmake.m4)
 
 # Drive documentation generation.
 ADD_CUSTOM_TARGET(documentation ALL DEPENDS ${DOC_FILES} ${CMake_BINARY_DIR}/Docs/cmake.txt )
diff --git a/Utilities/cmake.m4 b/Utilities/cmake.m4
new file mode 100644
index 0000000..a374a3b
--- /dev/null
+++ b/Utilities/cmake.m4
@@ -0,0 +1,53 @@
+dnl ============================================================================
+dnl   CMake - Cross Platform Makefile Generator
+dnl   Copyright 2011 Matthias Kretz, kretz at kde.org
+dnl
+dnl   Distributed under the OSI-approved BSD License (the "License");
+dnl   see accompanying file Copyright.txt for details.
+dnl
+dnl   This software is distributed WITHOUT ANY WARRANTY; without even the
+dnl   implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+dnl   See the License for more information.
+dnl ============================================================================
+
+AC_DEFUN([CMAKE_FIND_BINARY],
+[AC_ARG_VAR([CMAKE_BINARY], [path to the cmake binary])dnl
+
+if test "x$ac_cv_env_CMAKE_BINARY_set" != "xset"; then
+    AC_PATH_TOOL([CMAKE_BINARY], [cmake])dnl
+fi
+])dnl
+
+# $1: package name
+# $2: language (e.g. C/CXX/Fortran)
+# $3: The compiler ID, defaults to GNU.
+#     Possible values are: GNU, Intel, Clang, SunPro, HP, XL, VisualAge, PGI,
+#     PathScale, Cray, SCO, MIPSpro, MSVC
+# $4: optional extra arguments to cmake, e.g. "-DCMAKE_SIZEOF_VOID_P=8"
+# $5: optional path to cmake binary
+AC_DEFUN([CMAKE_FIND_PACKAGE], [
+AC_REQUIRE([CMAKE_FIND_BINARY])dnl
+
+AC_ARG_VAR([$1][_][$2][FLAGS], [$2 compiler flags for $1. This overrides the cmake output])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1. This overrides the cmake output])dnl
+
+failed=false
+AC_MSG_CHECKING([for $1])
+if test -n "$1[]_$2[]FLAGS"; then
+    $1[]_$2[]FLAGS=`$CMAKE_BINARY --find-package "-DNAME=$1" "-DCOMPILER_ID=m4_default([$3], [GNU])" "-DLANGUAGE=$2" -DMODE=COMPILE $4` || failed=true
+fi
+if test -n "$1[]_LIBS"; then
+    $1[]_LIBS=`$CMAKE_BINARY --find-package "-DNAME=$1" "-DCOMPILER_ID=m4_default([$3], [GNU])" "-DLANGUAGE=$2" -DMODE=LINK $4` || failed=true
+fi
+
+if $failed; then
+    unset $1[]_$2[]FLAGS
+    unset $1[]_LIBS
+
+    AC_MSG_RESULT([no])
+    $6
+else
+    AC_MSG_RESULT([yes])
+    $5
+fi[]dnl
+])

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b0e357824c0ddf1a57db7742da3d5f3f90af97d2
commit b0e357824c0ddf1a57db7742da3d5f3f90af97d2
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Mon Jul 18 21:40:45 2011 +0200
Commit:     Alex Neundorf <neundorf at kde.org>
CommitDate: Tue Aug 9 16:32:45 2011 +0200

    Use the file-utility to test for 64bit if there is no /usr/lib64
    
    Alex

diff --git a/Modules/CMakeFindPackageMode.cmake b/Modules/CMakeFindPackageMode.cmake
index bebf3ab..3e5cb49 100644
--- a/Modules/CMakeFindPackageMode.cmake
+++ b/Modules/CMakeFindPackageMode.cmake
@@ -45,10 +45,18 @@ if(UNIX)
   # try to guess whether we have a 64bit system, if it has not been set
   # from the outside
   if(NOT CMAKE_SIZEOF_VOID_P)
+    set(CMAKE_SIZEOF_VOID_P 4)
     if(EXISTS /usr/lib64)
       set(CMAKE_SIZEOF_VOID_P 8)
     else()
-      set(CMAKE_SIZEOF_VOID_P 4)
+      # use the file utility to check whether itself is 64 bit:
+      find_program(FILE_EXECUTABLE file)
+      if(FILE_EXECUTABLE)
+        execute_process(COMMAND "${FILE_EXECUTABLE}" "${FILE_EXECUTABLE}" OUTPUT_VARIABLE fileOutput ERROR_QUIET)
+        if("${fileOutput}" MATCHES "64-bit")
+          set(CMAKE_SIZEOF_VOID_P 8)
+        endif()
+      endif()
     endif()
   endif()
 
@@ -56,7 +64,6 @@ if(UNIX)
   if(EXISTS /etc/debian_version)
     if(NOT CMAKE_${LANGUAGE}_LANGUAGE_ARCHITECTURE )
       file(GLOB filesInLib RELATIVE /lib /lib/*-linux-gnu* )
-      list(APPEND filesInLib i386-linux-gnu)
       foreach(file ${filesInLib})
         if("${file}" MATCHES "${CMAKE_LIBRARY_ARCHITECTURE_REGEX}")
           set(CMAKE_${LANGUAGE}_LANGUAGE_ARCHITECTURE ${file})

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=53edfb206b549f0dd5a014aac054ca82d865bbcd
commit 53edfb206b549f0dd5a014aac054ca82d865bbcd
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Thu Jul 14 23:53:01 2011 +0200
Commit:     Alex Neundorf <neundorf at kde.org>
CommitDate: Tue Aug 9 16:32:45 2011 +0200

    Better support for lib64 and Debian multiarch
    
    If CMAKE_SIZEOF_VOID_P is not set from the outside, it checks for the
    existance of /usr/lib64, and if it exists, SIZEOF_VOID_P is set to 8.
    
    For multiarch, if this is debian and
    CMAKE_${LANGUAGE}_LANGUAGE_ARCHITECTURE has not been set, it globs
    for the files in /lib, and uses the first one which matches
    CMAKE_LIBRARY_ARCHITECTURE_REGEX.
    
    Alex

diff --git a/Modules/CMakeFindPackageMode.cmake b/Modules/CMakeFindPackageMode.cmake
index 7e95463..bebf3ab 100644
--- a/Modules/CMakeFindPackageMode.cmake
+++ b/Modules/CMakeFindPackageMode.cmake
@@ -40,9 +40,32 @@ include(CMakeDetermineSystem)
 # This makes the FIND_XXX() calls work much better
 include(CMakeSystemSpecificInformation)
 
-# this is ugly, and not enough for the multilib-stuff I guess
-if(UNIX AND EXISTS /usr/lib64)
-  set(CMAKE_SIZEOF_VOID_P 8)
+if(UNIX)
+
+  # try to guess whether we have a 64bit system, if it has not been set
+  # from the outside
+  if(NOT CMAKE_SIZEOF_VOID_P)
+    if(EXISTS /usr/lib64)
+      set(CMAKE_SIZEOF_VOID_P 8)
+    else()
+      set(CMAKE_SIZEOF_VOID_P 4)
+    endif()
+  endif()
+
+  # guess Debian multiarch if it has not been set:
+  if(EXISTS /etc/debian_version)
+    if(NOT CMAKE_${LANGUAGE}_LANGUAGE_ARCHITECTURE )
+      file(GLOB filesInLib RELATIVE /lib /lib/*-linux-gnu* )
+      list(APPEND filesInLib i386-linux-gnu)
+      foreach(file ${filesInLib})
+        if("${file}" MATCHES "${CMAKE_LIBRARY_ARCHITECTURE_REGEX}")
+          set(CMAKE_${LANGUAGE}_LANGUAGE_ARCHITECTURE ${file})
+          break()
+        endif()
+      endforeach()
+    endif()
+  endif()
+
 endif()
 
 set(CMAKE_${LANGUAGE}_COMPILER "dummy")

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b8fdaa1d662b01a167c94f2a9a9efec9dd0ea2d0
commit b8fdaa1d662b01a167c94f2a9a9efec9dd0ea2d0
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Wed Jul 13 19:02:08 2011 +0200
Commit:     Alex Neundorf <neundorf at kde.org>
CommitDate: Tue Aug 9 16:32:45 2011 +0200

    Fix copyright notice in new CMakeFindPackageMode.cmake
    
    Alex

diff --git a/Modules/CMakeFindPackageMode.cmake b/Modules/CMakeFindPackageMode.cmake
index 5842c7a..7e95463 100644
--- a/Modules/CMakeFindPackageMode.cmake
+++ b/Modules/CMakeFindPackageMode.cmake
@@ -4,6 +4,19 @@
 # NAME = name of the package
 # QUIET = if TRUE, don't print anything
 
+#=============================================================================
+# Copyright 2006-2011 Alexander Neundorf, <neundorf at kde.org>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
 if(NOT NAME)
   message(FATAL_ERROR "NAME argument not specified.")
 endif()

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7690edffd9801c41dcfa4ef2a6213d4883e55c83
commit 7690edffd9801c41dcfa4ef2a6213d4883e55c83
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Wed Jul 13 18:59:51 2011 +0200
Commit:     Alex Neundorf <neundorf at kde.org>
CommitDate: Tue Aug 9 16:32:45 2011 +0200

    Replace cmake::GetScriptMode() with GetWorkingMode()
    
    GetWorkingMode() returns a new enum WorkingMode, which is one of
    NORMAL_MODE, SCRIPT_MODE and FIND_PACKAGE_MODE.
    
    Alex

diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 6c8938e..31035cd 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -782,7 +782,7 @@ void cmGlobalGenerator::Configure()
   // so create the map from project name to vector of local generators
   this->FillProjectMap();
 
-  if ( !this->CMakeInstance->GetScriptMode() )
+  if ( this->CMakeInstance->GetWorkingMode() == cmake::NORMAL_MODE)
     {
     const char* msg = "Configuring done";
     if(cmSystemTools::GetErrorOccuredFlag())
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 163145e..3329a2c 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -384,8 +384,8 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
 
     // Decide whether to invoke the command.
     if(pcmd->GetEnabled() && !cmSystemTools::GetFatalErrorOccured()  &&
-       (this->GetCMakeInstance()->GetFindPackageMode()
-       || !this->GetCMakeInstance()->GetScriptMode() || pcmd->IsScriptable()))
+       (this->GetCMakeInstance()->GetWorkingMode() != cmake::SCRIPT_MODE
+       || pcmd->IsScriptable()))
 
       {
       // if trace is one, print out invoke information
@@ -413,7 +413,7 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
           this->IssueMessage(cmake::FATAL_ERROR, pcmd->GetError());
           }
         result = false;
-        if ( this->GetCMakeInstance()->GetScriptMode() )
+        if ( this->GetCMakeInstance()->GetWorkingMode() != cmake::NORMAL_MODE)
           {
           cmSystemTools::SetFatalErrorOccured();
           }
@@ -424,7 +424,7 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
         this->UsedCommands.push_back(pcmd.release());
         }
       }
-    else if ( this->GetCMakeInstance()->GetScriptMode()
+    else if ( this->GetCMakeInstance()->GetWorkingMode() == cmake::SCRIPT_MODE
               && !pcmd->IsScriptable() )
       {
       std::string error = "Command ";
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 5b6286e..8cadc4f 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -180,8 +180,7 @@ cmake::cmake()
   this->GlobalGenerator = 0;
   this->ProgressCallback = 0;
   this->ProgressCallbackClientData = 0;
-  this->ScriptMode = false;
-  this->FindPackageMode = false;
+  this->CurrentWorkingMode = NORMAL_MODE;
 
 #ifdef CMAKE_BUILD_WITH_CMAKE
   this->VariableWatch = new cmVariableWatch;
@@ -523,7 +522,7 @@ void cmake::ReadListFile(const std::vector<std::string>& args,
       (cmSystemTools::GetCurrentWorkingDirectory().c_str());
     lg->GetMakefile()->SetStartDirectory
       (cmSystemTools::GetCurrentWorkingDirectory().c_str());
-    if (this->GetScriptMode())
+    if (this->GetWorkingMode() != NORMAL_MODE)
       {
       std::string file(cmSystemTools::CollapseFullPath(path));
       cmSystemTools::ConvertToUnixSlashes(file);
@@ -2147,7 +2146,7 @@ int cmake::ActualConfigure()
   this->CleanupCommandsAndMacros();
 
   int res = 0;
-  if ( !this->ScriptMode )
+  if ( this->GetWorkingMode() == NORMAL_MODE )
     {
     res = this->DoPreConfigureChecks();
     }
@@ -2335,7 +2334,7 @@ int cmake::ActualConfigure()
     this->CacheManager->RemoveCacheEntry("CMAKE_EXTRA_GENERATOR");
     }
   // only save the cache if there were no fatal errors
-  if ( !this->ScriptMode )
+  if ( this->GetWorkingMode() == NORMAL_MODE )
     {
     this->CacheManager->SaveCache(this->GetHomeOutputDirectory());
     }
@@ -2401,7 +2400,7 @@ int cmake::Run(const std::vector<std::string>& args, bool noconfigure)
   // set the cmake command
   this->CMakeCommand = args[0];
 
-  if ( !this->ScriptMode )
+  if ( this->GetWorkingMode() == NORMAL_MODE )
     {
     // load the cache
     if(this->LoadCache() < 0)
@@ -2422,7 +2421,7 @@ int cmake::Run(const std::vector<std::string>& args, bool noconfigure)
     }
 
   // In script mode we terminate after running the script.
-  if(this->ScriptMode)
+  if(this->GetWorkingMode() != NORMAL_MODE)
     {
     if(cmSystemTools::GetErrorOccuredFlag())
       {
@@ -2468,7 +2467,7 @@ int cmake::Run(const std::vector<std::string>& args, bool noconfigure)
   this->SetStartDirectory(this->GetHomeDirectory());
   this->SetStartOutputDirectory(this->GetHomeOutputDirectory());
   int ret = this->Configure();
-  if (ret || this->ScriptMode)
+  if (ret || this->GetWorkingMode() != NORMAL_MODE)
     {
 #if defined(CMAKE_HAVE_VS_GENERATORS)
     if(!this->VSSolutionFile.empty() && this->GlobalGenerator)
diff --git a/Source/cmake.h b/Source/cmake.h
index 7335813..46d375e 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -64,6 +64,25 @@ class cmake
     WARNING,
     LOG
   };
+
+
+  /** Describes the working modes of cmake.
+   * NORMAL_MODE: cmake runs to create project files
+   * SCRIPT_MODE: in script mode there is no generator and no cache. Also,
+   *              language are not enabled, so add_executable and things do
+   *              not do anything. Started by using -P
+   * FIND_PACKAGE_MODE: cmake runs in pkg-config like mode, i.e. it just
+   *              searches for a package and prints the results to stdout.
+   *              This is similar to SCRIPT_MODE, but commands like
+   *              add_library() work too, since they may be used e.g. in
+   *              exported target files. Started via --find-package
+   */
+  enum WorkingMode
+  {
+    NORMAL_MODE,
+    SCRIPT_MODE,
+    FIND_PACKAGE_MODE
+  };
   typedef std::map<cmStdString, cmCommand*> RegisteredCommandsMap;
 
   ///! construct an instance of cmake
@@ -274,16 +293,8 @@ class cmake
   ///! Do all the checks before running configure
   int DoPreConfigureChecks();
 
-  /**
-   * Set and get the script mode option. In script mode there is no
-   * generator and no cache. Also, language are not enabled, so
-   * add_executable and things do not do anything.
-   */
-  void SetScriptMode(bool mode) { this->ScriptMode = mode; }
-  bool GetScriptMode() { return this->ScriptMode; }
-
-  void SetFindPackageMode(bool mode) {this->FindPackageMode = mode; }
-  bool GetFindPackageMode() {return this->FindPackageMode;}
+  void SetWorkingMode(WorkingMode mode) { this->CurrentWorkingMode = mode; }
+  WorkingMode GetWorkingMode() { return this->CurrentWorkingMode; }
 
   ///! Debug the try compile stuff by not delelting the files
   bool GetDebugTryCompile(){return this->DebugTryCompile;}
@@ -464,8 +475,7 @@ private:
   void* ProgressCallbackClientData;
   bool Verbose;
   bool InTryCompile;
-  bool ScriptMode;
-  bool FindPackageMode;
+  WorkingMode CurrentWorkingMode;
   bool DebugOutput;
   bool Trace;
   bool WarnUninitialized;
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index ae4529a..c744dcd 100644
--- a/Source/cmakemain.cxx
+++ b/Source/cmakemain.cxx
@@ -436,8 +436,7 @@ int do_cmake(int ac, char** av)
   bool list_all_cached = false;
   bool list_help = false;
   bool view_only = false;
-  bool script_mode = false;
-  bool find_package_mode = false;
+  cmake::WorkingMode workingMode = cmake::NORMAL_MODE;
   std::vector<std::string> args;
   for(int i =0; i < ac; ++i)
     {
@@ -485,7 +484,7 @@ int do_cmake(int ac, char** av)
         }
       else
         {
-        script_mode = true;
+        workingMode = cmake::SCRIPT_MODE;
         args.push_back(av[i]);
         i++;
         args.push_back(av[i]);
@@ -494,7 +493,7 @@ int do_cmake(int ac, char** av)
     else if (!command && strncmp(av[i], "--find-package",
                                  strlen("--find-package")) == 0)
       {
-      find_package_mode = true;
+      workingMode = cmake::FIND_PACKAGE_MODE;
       args.push_back(av[i]);
       }
     else 
@@ -521,8 +520,7 @@ int do_cmake(int ac, char** av)
   cmake cm;  
   cmSystemTools::SetErrorCallback(cmakemainErrorCallback, (void *)&cm);
   cm.SetProgressCallback(cmakemainProgressCallback, (void *)&cm);
-  cm.SetScriptMode(script_mode || find_package_mode);
-  cm.SetFindPackageMode(find_package_mode);
+  cm.SetWorkingMode(workingMode);
 
   int res = cm.Run(args, view_only);
   if ( list_cached || list_all_cached )

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e4f603b698a13857e79a5f6df18a7461b20d4bd4
commit e4f603b698a13857e79a5f6df18a7461b20d4bd4
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Sat Jul 2 23:14:28 2011 +0200
Commit:     Alex Neundorf <neundorf at kde.org>
CommitDate: Sat Jul 2 23:14:28 2011 +0200

    Implement find-package mode of cmake
    
    In find-package mode, cmake executes Modules/CMakeFindPackage.cmake,
    which calls find_package(), and this is then evaluated in cmake.cxx,
    which prints an appropriate message to stdout, so it can be used
    e.g. in a normal Makefile:
    
    $ /opt/cmake-HEAD/bin/cmake --find-package -DNAME=JPEG
     -DCOMPILER_ID=GNU -DLANGUAGE=C -DMODE=EXIST
    JPEG found.
    $ /opt/cmake-HEAD/bin/cmake --find-package -DNAME=JPEG
     -DCOMPILER_ID=GNU -DLANGUAGE=C -DMODE=COMPILE
    
    $ /opt/cmake-HEAD/bin/cmake --find-package -DNAME=JPEG
     -DCOMPILER_ID=GNU -DLANGUAGE=C -DMODE=LINK
    -rdynamic -ljpeg
    
    Alex

diff --git a/Modules/CMakeFindPackageMode.cmake b/Modules/CMakeFindPackageMode.cmake
new file mode 100644
index 0000000..5842c7a
--- /dev/null
+++ b/Modules/CMakeFindPackageMode.cmake
@@ -0,0 +1,125 @@
+# COMPILER_ID = GNU/Intel/etc.
+# LANGUAGE = C/CXX/Fortan/ASM
+# MODE = EXIST/COMPILE/LINK
+# NAME = name of the package
+# QUIET = if TRUE, don't print anything
+
+if(NOT NAME)
+  message(FATAL_ERROR "NAME argument not specified.")
+endif()
+
+if(NOT COMPILER_ID)
+  message(FATAL_ERROR "COMPILER_ID argument not specified. In doubt, use GNU.")
+endif()
+
+if(NOT LANGUAGE)
+  message(FATAL_ERROR "LANGUAGE argument not specified. Use C, CXX or Fortran.")
+endif()
+
+if(NOT MODE)
+  message(FATAL_ERROR "MODE argument not specified. Use either EXIST, COMPILE or LINK.")
+endif()
+
+
+include(CMakeDetermineSystem)
+
+# Also load the system specific file, which sets up e.g. the search paths.
+# This makes the FIND_XXX() calls work much better
+include(CMakeSystemSpecificInformation)
+
+# this is ugly, and not enough for the multilib-stuff I guess
+if(UNIX AND EXISTS /usr/lib64)
+  set(CMAKE_SIZEOF_VOID_P 8)
+endif()
+
+set(CMAKE_${LANGUAGE}_COMPILER "dummy")
+set(CMAKE_${LANGUAGE}_COMPILER_ID "${COMPILER_ID}")
+include(CMake${LANGUAGE}Information)
+
+
+function(print_compile_flags _packageName)
+  string(TOUPPER "${_packageName}" PACKAGE_NAME)
+  # Check the following variables:
+  # FOO_INCLUDE_DIRS
+  # Foo_INCLUDE_DIRS
+  # FOO_INCLUDES
+  # Foo_INCLUDES
+  # FOO_INCLUDE_DIR
+  # Foo_INCLUDE_DIR
+  set(includes)
+  if(DEFINED ${_packageName}_INCLUDE_DIRS)
+    set(includes ${_packageName}_INCLUDE_DIRS)
+  elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIRS)
+    set(includes ${PACKAGE_NAME}_INCLUDE_DIRS)
+  elseif(DEFINED ${_packageName}_INCLUDES)
+    set(includes ${_packageName}_INCLUDES)
+  elseif(DEFINED ${PACKAGE_NAME}_INCLUDES)
+    set(includes ${PACKAGE_NAME}_INCLUDES)
+  elseif(DEFINED ${_packageName}_INCLUDE_DIR)
+    set(includes ${_packageName}_INCLUDE_DIR)
+  elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIR)
+    set(includes ${PACKAGE_NAME}_INCLUDE_DIR)
+  endif()
+
+  set(PACKAGE_INCLUDE_DIRS "${${includes}}" PARENT_SCOPE)
+
+  # Check the following variables:
+  # FOO_DEFINITIONS
+  # Foo_DEFINITIONS
+  set(definitions)
+  if(DEFINED ${_packageName}_DEFINITIONS)
+    set(definitions ${_packageName}_DEFINITIONS)
+  elseif(DEFINED ${PACKAGE_NAME}_DEFINITIONS)
+    set(definitions ${PACKAGE_NAME}_DEFINITIONS)
+  endif()
+
+  set(PACKAGE_DEFINITIONS  "${${definitions}}" )
+
+endfunction()
+
+
+function(print_link_flags _packageName)
+  string(TOUPPER "${_packageName}" PACKAGE_NAME)
+  # Check the following variables:
+  # FOO_LIBRARIES
+  # Foo_LIBRARIES
+  # FOO_LIBS
+  # Foo_LIBS
+  set(libs)
+  if(DEFINED ${_packageName}_LIBRARIES)
+    set(libs ${_packageName}_LIBRARIES)
+  elseif(DEFINED ${PACKAGE_NAME}_LIBRARIES)
+    set(libs ${PACKAGE_NAME}_LIBRARIES)
+  elseif(DEFINED ${_packageName}_LIBS)
+    set(libs ${_packageName}_LIBS)
+  elseif(DEFINED ${PACKAGE_NAME}_LIBS)
+    set(libs ${PACKAGE_NAME}_LIBS)
+  endif()
+
+  set(PACKAGE_LIBRARIES "${${libs}}" PARENT_SCOPE )
+
+endfunction()
+
+
+find_package("${NAME}" QUIET)
+
+set(PACKAGE_FOUND FALSE)
+
+string(TOUPPER "${NAME}" UPPERCASE_NAME)
+
+if(${NAME}_FOUND  OR  ${UPPERCASE_NAME}_FOUND)
+  set(PACKAGE_FOUND TRUE)
+
+  if("${MODE}" STREQUAL "EXIST")
+    # do nothing
+  elseif("${MODE}" STREQUAL "COMPILE")
+    print_compile_flags(${NAME})
+  elseif("${MODE}" STREQUAL "LINK")
+    print_link_flags(${NAME})
+  else("${MODE}" STREQUAL "LINK")
+    message(FATAL_ERROR "Invalid mode argument ${MODE} given.")
+  endif()
+
+endif()
+
+set(PACKAGE_QUIET ${SILENT} )
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 3d42c7f..5b6286e 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -547,8 +547,104 @@ void cmake::ReadListFile(const std::vector<std::string>& args,
 
 bool cmake::FindPackage(const std::vector<std::string>& args)
 {
-  // create empty function for now, will be filled later
-  return true;
+  // if a generator was not yet created, temporarily create one
+  cmGlobalGenerator *gg = new cmGlobalGenerator;
+  gg->SetCMakeInstance(this);
+  this->SetGlobalGenerator(gg);
+
+  // read in the list file to fill the cache
+  std::auto_ptr<cmLocalGenerator> lg(gg->CreateLocalGenerator());
+  cmMakefile* mf = lg->GetMakefile();
+  mf->SetHomeOutputDirectory
+    (cmSystemTools::GetCurrentWorkingDirectory().c_str());
+  mf->SetStartOutputDirectory
+    (cmSystemTools::GetCurrentWorkingDirectory().c_str());
+  mf->SetHomeDirectory
+    (cmSystemTools::GetCurrentWorkingDirectory().c_str());
+  mf->SetStartDirectory
+    (cmSystemTools::GetCurrentWorkingDirectory().c_str());
+
+  mf->SetArgcArgv(args);
+
+  std::string systemFile = mf->GetModulesFile("CMakeFindPackageMode.cmake");
+  mf->ReadListFile(0, systemFile.c_str());
+
+  std::string language = mf->GetSafeDefinition("LANGUAGE");
+  std::string mode = mf->GetSafeDefinition("MODE");
+  std::string packageName = mf->GetSafeDefinition("NAME");
+  bool packageFound = mf->IsOn("PACKAGE_FOUND");
+  bool quiet = mf->IsOn("PACKAGE_QUIET");
+
+  if (!packageFound)
+    {
+    if (!quiet)
+      {
+      printf("%s not found.\n", packageName.c_str());
+      }
+    }
+  else if (mode == "EXIST")
+    {
+    if (!quiet)
+      {
+      printf("%s found.\n", packageName.c_str());
+      }
+    }
+  else if (mode == "COMPILE")
+    {
+    std::string includes = mf->GetSafeDefinition("PACKAGE_INCLUDE_DIRS");
+    std::vector<std::string> includeDirs;
+    cmSystemTools::ExpandListArgument(includes, includeDirs);
+    for(std::vector<std::string>::const_iterator dirIt=includeDirs.begin();
+            dirIt != includeDirs.end();
+            ++dirIt)
+      {
+      mf->AddIncludeDirectory(dirIt->c_str(), false);
+      }
+
+    std::string includeFlags = lg->GetIncludeFlags(language.c_str(), false);
+    std::string definitions = mf->GetSafeDefinition("PACKAGE_DEFINITIONS");
+    printf("%s %s\n", includeFlags.c_str(), definitions.c_str());
+    }
+  else if (mode == "LINK")
+    {
+    const char* targetName = "dummy";
+    std::vector<std::string> srcs;
+    cmTarget* tgt = mf->AddExecutable(targetName, srcs, true);
+    tgt->SetProperty("LINKER_LANGUAGE", language.c_str());
+
+    std::string libs = mf->GetSafeDefinition("PACKAGE_LIBRARIES");
+    std::vector<std::string> libList;
+    cmSystemTools::ExpandListArgument(libs, libList);
+    for(std::vector<std::string>::const_iterator libIt=libList.begin();
+            libIt != libList.end();
+            ++libIt)
+      {
+      mf->AddLinkLibraryForTarget(targetName, libIt->c_str(), cmTarget::GENERAL);
+      }
+
+
+    std::string linkLibs;
+    std::string flags;
+    std::string linkFlags;
+    lg->GetTargetFlags(linkLibs, flags, linkFlags, *tgt);
+
+    printf("%s\n", linkLibs.c_str() );
+
+/*    if ( use_win32 )
+      {
+      tgt->SetProperty("WIN32_EXECUTABLE", "ON");
+      }
+    if ( use_macbundle)
+      {
+      tgt->SetProperty("MACOSX_BUNDLE", "ON");
+      }*/
+    }
+
+  // free generic one if generated
+//  this->SetGlobalGenerator(0); // setting 0-pointer is not possible
+//  delete gg; // this crashes inside the cmake instance
+
+  return packageFound;
 }
 
 

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a91d662f46fd2781fc5a3b73c2d244ac6dc2a343
commit a91d662f46fd2781fc5a3b73c2d244ac6dc2a343
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Sat Jul 2 17:50:05 2011 +0200
Commit:     Alex Neundorf <neundorf at kde.org>
CommitDate: Sat Jul 2 17:50:05 2011 +0200

    Add find-package mode, which does nothing yet
    
    -add command line argument --find-package and handle it,
     i.e. call an empty function cmake::FindPackage()
    -add basic help
    
    Alex

diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 63bf03b..163145e 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -384,7 +384,9 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
 
     // Decide whether to invoke the command.
     if(pcmd->GetEnabled() && !cmSystemTools::GetFatalErrorOccured()  &&
-       (!this->GetCMakeInstance()->GetScriptMode() || pcmd->IsScriptable()))
+       (this->GetCMakeInstance()->GetFindPackageMode()
+       || !this->GetCMakeInstance()->GetScriptMode() || pcmd->IsScriptable()))
+
       {
       // if trace is one, print out invoke information
       if(this->GetCMakeInstance()->GetTrace())
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 45927cb..3d42c7f 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -181,6 +181,7 @@ cmake::cmake()
   this->ProgressCallback = 0;
   this->ProgressCallbackClientData = 0;
   this->ScriptMode = false;
+  this->FindPackageMode = false;
 
 #ifdef CMAKE_BUILD_WITH_CMAKE
   this->VariableWatch = new cmVariableWatch;
@@ -353,6 +354,7 @@ void cmake::RemoveUnscriptableCommands()
 // Parse the args
 bool cmake::SetCacheArgs(const std::vector<std::string>& args)
 {
+  bool findPackageMode = false;
   for(unsigned int i=1; i < args.size(); ++i)
     {
     std::string arg = args[i];
@@ -480,7 +482,17 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
         }
       this->ReadListFile(args, path.c_str());
       }
+    else if (arg.find("--find-package",0) == 0)
+      {
+      findPackageMode = true;
+      }
+    }
+
+  if (findPackageMode)
+    {
+    return this->FindPackage(args);
     }
+
   return true;
 }
 
@@ -532,6 +544,14 @@ void cmake::ReadListFile(const std::vector<std::string>& args,
     }
 }
 
+
+bool cmake::FindPackage(const std::vector<std::string>& args)
+{
+  // create empty function for now, will be filled later
+  return true;
+}
+
+
 // Parse the args
 void cmake::SetArgs(const std::vector<std::string>& args,
                     bool directoriesSetBefore)
@@ -604,6 +624,11 @@ void cmake::SetArgs(const std::vector<std::string>& args,
       // skip for now
       i++;
       }
+    else if(arg.find("--find-package",0) == 0)
+      {
+      // skip for now
+      i++;
+      }
     else if(arg.find("-Wno-dev",0) == 0)
       {
       // skip for now
diff --git a/Source/cmake.h b/Source/cmake.h
index fac86c1..7335813 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -282,6 +282,9 @@ class cmake
   void SetScriptMode(bool mode) { this->ScriptMode = mode; }
   bool GetScriptMode() { return this->ScriptMode; }
 
+  void SetFindPackageMode(bool mode) {this->FindPackageMode = mode; }
+  bool GetFindPackageMode() {return this->FindPackageMode;}
+
   ///! Debug the try compile stuff by not delelting the files
   bool GetDebugTryCompile(){return this->DebugTryCompile;}
   void DebugTryCompileOn(){this->DebugTryCompile = true;}
@@ -407,6 +410,7 @@ protected:
 
   ///! read in a cmake list file to initialize the cache
   void ReadListFile(const std::vector<std::string>& args, const char *path);
+  bool FindPackage(const std::vector<std::string>& args);
 
   ///! Check if CMAKE_CACHEFILE_DIR is set. If it is not, delete the log file.
   ///  If it is set, truncate it to 50kb
@@ -461,6 +465,7 @@ private:
   bool Verbose;
   bool InTryCompile;
   bool ScriptMode;
+  bool FindPackageMode;
   bool DebugOutput;
   bool Trace;
   bool WarnUninitialized;
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index 663ce8f..ae4529a 100644
--- a/Source/cmakemain.cxx
+++ b/Source/cmakemain.cxx
@@ -102,6 +102,9 @@ static const char * cmDocumentationOptions[][3] =
    "No configure or generate step is performed and the cache is not"
    " modified. If variables are defined using -D, this must be done "
    "before the -P argument."},
+  {"--find-package", "Run in pkg-config like mode.",
+   "Search a package using find_package() and print the resulting flags "
+   "to stdout. "},
   {"--graphviz=[file]", "Generate graphviz of dependencies.",
    "Generate a graphviz input file that will contain all the library and "
    "executable dependencies in the project."},
@@ -434,6 +437,7 @@ int do_cmake(int ac, char** av)
   bool list_help = false;
   bool view_only = false;
   bool script_mode = false;
+  bool find_package_mode = false;
   std::vector<std::string> args;
   for(int i =0; i < ac; ++i)
     {
@@ -487,6 +491,12 @@ int do_cmake(int ac, char** av)
         args.push_back(av[i]);
         }
       }
+    else if (!command && strncmp(av[i], "--find-package",
+                                 strlen("--find-package")) == 0)
+      {
+      find_package_mode = true;
+      args.push_back(av[i]);
+      }
     else 
       {
       args.push_back(av[i]);
@@ -511,7 +521,8 @@ int do_cmake(int ac, char** av)
   cmake cm;  
   cmSystemTools::SetErrorCallback(cmakemainErrorCallback, (void *)&cm);
   cm.SetProgressCallback(cmakemainProgressCallback, (void *)&cm);
-  cm.SetScriptMode(script_mode);
+  cm.SetScriptMode(script_mode || find_package_mode);
+  cm.SetFindPackageMode(find_package_mode);
 
   int res = cm.Run(args, view_only);
   if ( list_cached || list_all_cached )

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b976e70063008c0633cb5dd4ecb1f40278c67935
commit b976e70063008c0633cb5dd4ecb1f40278c67935
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Sat Jul 2 17:08:34 2011 +0200
Commit:     Alex Neundorf <neundorf at kde.org>
CommitDate: Sat Jul 2 17:08:34 2011 +0200

    Make clLocalGenerator::GetTargetFlags() public
    
    This will later on be used for getting the link flags
    
    Alex

diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index aebf9f3..a204a73 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -307,7 +307,6 @@ public:
                                              std::string const& dir_max,
                                              bool* hasSourceExtension = 0);
 
-protected:
   /** Fill out these strings for the given target.  Libraries to link,
    *  flags, and linkflags. */
   void GetTargetFlags(std::string& linkLibs, 
@@ -315,6 +314,7 @@ protected:
                       std::string& linkFlags,
                       cmTarget&target);
   
+protected:
   ///! put all the libraries for a target on into the given stream
   virtual void OutputLinkLibraries(std::ostream&, cmTarget&, bool relink);
   

-----------------------------------------------------------------------

Summary of changes:
 Modules/CMakeFindPackageMode.cmake               |  172 ++++++++++++++++++++++
 Source/cmGlobalGenerator.cxx                     |    2 +-
 Source/cmLocalGenerator.h                        |    2 +-
 Source/cmMakefile.cxx                            |    8 +-
 Source/cmake.cxx                                 |  134 ++++++++++++++++-
 Source/cmake.h                                   |   31 +++-
 Source/cmakemain.cxx                             |   17 ++-
 Tests/CMakeLists.txt                             |    2 +
 Tests/FindPackageModeMakefileTest/CMakeLists.txt |   22 +++
 Tests/FindPackageModeMakefileTest/Makefile.in    |    8 +
 Tests/FindPackageModeMakefileTest/main.cpp       |    8 +
 Utilities/CMakeLists.txt                         |    1 +
 Utilities/cmake.m4                               |   53 +++++++
 13 files changed, 437 insertions(+), 23 deletions(-)
 create mode 100644 Modules/CMakeFindPackageMode.cmake
 create mode 100644 Tests/FindPackageModeMakefileTest/CMakeLists.txt
 create mode 100644 Tests/FindPackageModeMakefileTest/Makefile.in
 create mode 100644 Tests/FindPackageModeMakefileTest/main.cpp
 create mode 100644 Utilities/cmake.m4


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list