Fix #1673, CheckLib should prepend rather than append.
authorgaryo <garyo@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 7 May 2009 02:11:06 +0000 (02:11 +0000)
committergaryo <garyo@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 7 May 2009 02:11:06 +0000 (02:11 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@4175 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/RELEASE.txt
src/engine/SCons/Conftest.py
src/engine/SCons/SConf.py

index 810bdddde4c9bf3418a814c49edc5337c82cf7ad..5691dd70ec1d7230dbfdfab284f324951bc4e211 100644 (file)
@@ -867,6 +867,18 @@ RELEASE 1.2.0.d20090223 - Mon, 23 Feb 2009 08:41:06 -0800
 
                     EnsureSConsVersion(0, 96, 93)
 
+    --  THE CheckLib Configure TEST WILL CHANGE BEHAVIOR
+
+       The CheckLib() Configure test appends the lib(s) to the
+       Environment's LIBS list in 1.3 and earlier.  In 1.3 there is a
+       new CheckLib argument, append, which defaults to True to
+       preserve the old behavior.  In a future release, append will
+       be changed to default to False, to conform with autoconf and
+       user expectations, since it is usually used to build up
+       library lists in a right-to-left way.
+
+
+
   SCons is developed with an extensive regression test suite, and a
   rigorous development methodology for continually improving that suite.
   Because of this, SCons is of sufficient quality that you can use it
index 6327353060f8bb1573bc61ee30106c721aca9017..e995e77a8678955bf4583ee6067e6b1ab6370dd4 100644 (file)
@@ -64,13 +64,19 @@ Autoconf-like configuration support; low level implementation of tests.
 #                       Append "lib_name_list" to the value of LIBS.
 #                       "lib_namelist" is a list of strings.
 #                       Return the value of LIBS before changing it (any type
-#                       can be used, it is passed to SetLIBS() later.
+#                       can be used, it is passed to SetLIBS() later.)
+#
+# context.PrependLIBS(lib_name_list)
+#                       Prepend "lib_name_list" to the value of LIBS.
+#                       "lib_namelist" is a list of strings.
+#                       Return the value of LIBS before changing it (any type
+#                       can be used, it is passed to SetLIBS() later.)
 #
 # context.SetLIBS(value)
 #                       Set LIBS to "value".  The type of "value" is what
 #                       AppendLIBS() returned.
 #                       Return the value of LIBS before changing it (any type
-#                       can be used, it is passed to SetLIBS() later.
+#                       can be used, it is passed to SetLIBS() later.)
 #
 # context.headerfilename
 #                       Name of file to append configure results to, usually
@@ -572,7 +578,8 @@ int main()
     return st
 
 def CheckLib(context, libs, func_name = None, header = None,
-                 extra_libs = None, call = None, language = None, autoadd = 1):
+             extra_libs = None, call = None, language = None, autoadd = 1,
+             append = True):
     """
     Configure check for a C or C++ libraries "libs".  Searches through
     the list of libraries, until one is found where the test succeeds.
@@ -657,7 +664,10 @@ return 0;
             l = [ lib_name ]
             if extra_libs:
                 l.extend(extra_libs)
-            oldLIBS = context.AppendLIBS(l)
+            if append:
+                oldLIBS = context.AppendLIBS(l)
+            else:
+                oldLIBS = context.PrependLIBS(l)
             sym = "HAVE_LIB" + lib_name
         else:
             oldLIBS = -1
index 8586402879128739eb15555427ef5070eb2a848e..3749e41a065a507d12051335b1b7f26dd5bc54a1 100644 (file)
@@ -853,6 +853,11 @@ class CheckContext:
         self.env.Append(LIBS = lib_name_list)
         return oldLIBS
 
+    def PrependLIBS(self, lib_name_list):
+        oldLIBS = self.env.get( 'LIBS', [] )
+        self.env.Prepend(LIBS = lib_name_list)
+        return oldLIBS
+
     def SetLIBS(self, val):
         oldLIBS = self.env.get( 'LIBS', [] )
         self.env.Replace(LIBS = val)