]> git.ipfire.org Git - thirdparty/libtool.git/commitdiff
libtool.m4: Fix Objective C++ check
authorIleana Dumitrescu <ileanadumitrescu95@gmail.com>
Fri, 26 Sep 2025 18:42:18 +0000 (21:42 +0300)
committerIleana Dumitrescu <ileanadumitrescu95@gmail.com>
Mon, 29 Sep 2025 18:39:31 +0000 (21:39 +0300)
The check for Objective C++ was combined with the check for
Objective C, which caused Objective C++ tests to fail if language
support was enabled for OBJC but not OBJCXX. Additionally, a syntax
error with macros LT_PROG_OBJC and LT_PROG_OBJCXX was observed on
Fedora, exhibiting differing behaviour than observed on other
GNU/Linux operating systems.

Reported: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=79468

* m4/libtool.m4: Add separate check for Objective C++.
* tests/flags.at, tests/infer-tag.at: Update to check cached variable
  for Objective C++, objcxx_compiles.

m4/libtool.m4
tests/flags.at
tests/infer-tag.at

index 5ccb3a813171a8db023f2741454a121c2192b0fb..b758ae5a60ef445462661d0aa0e5eae14f51fd03 100644 (file)
@@ -534,7 +534,38 @@ m4_defun([_LT_OBJECTIVE_C], [
   )
   objc_compiles=$lt_cv_objc_compiles
   _LT_DECL([], [objc_compiles], [1],
-    [Check for compiling Objective C and C++ code])
+    [Check for compiling Objective C code])
+])
+
+# _LT_OBJECTIVE_CXX
+# ------------------------------
+m4_defun([_LT_OBJECTIVE_CXX], [
+  AC_CACHE_CHECK([for Objective C++ compilation],
+    [lt_cv_objcxx_compiles],
+    [ save_CFLAGS=$CFLAGS
+      CFLAGS=$OBJCXXFLAGS
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM([#import <Foundation/Foundation.h>
+@interface Addition : NSObject
+- (int)this:(int)a that:(int)b;
+@end
+
+@implementation Addition
+- (int)this:(int)a that:(int)b
+{
+  return a + b;
+}
+@end
+],[])],
+        lt_cv_objcxx_compiles=yes,
+        lt_cv_objcxx_compiles=no
+      )
+      CFLAGS=$save_CFLAGS
+    ]
+  )
+  objcxx_compiles=$lt_cv_objcxx_compiles
+  _LT_DECL([], [objcxx_compiles], [1],
+    [Check for compiling Objective C++ code])
 ])
 
 m4_defun([_LT_ML64], [
@@ -8529,7 +8560,10 @@ _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
 # Check for compilation issues with OBJCXX flags
-_LT_OBJECTIVE_C
+_LT_OBJECTIVE_CXX
+if test "yes" = "$lt_cv_gnustep_exists"; then
+  OBJCXXFLAGS="$OBJCXXFLAGS `gnustep-config --objc-flags`"
+fi
 
 # Allow CC to be a program name with arguments.
 lt_save_CC=$CC
@@ -8637,7 +8671,7 @@ AC_DEFUN([LT_PROG_OBJC],
   if test Xgnustep-config = X"$GNUSTEP_CONFIG"; then
     test set = "${OBJCFLAGS+set}" || OBJCFLAGS="`gnustep-config --objc-flags`"
   fi
-  AC_SUBST(OBJCFLAGS)])])[]dnl
+  AC_SUBST(OBJCFLAGS)])[]dnl
 ])
 
 # LT_PROG_OBJCXX
@@ -8648,7 +8682,7 @@ AC_DEFUN([LT_PROG_OBJCXX],
   if test Xgnustep-config = X"$GNUSTEP_CONFIG"; then
     test set = "${OBJCXXFLAGS+set}" || OBJCXXFLAGS="`gnustep-config --objc-flags`"
   fi
-  AC_SUBST(OBJCXXFLAGS)])])[]dnl
+  AC_SUBST(OBJCXXFLAGS)])[]dnl
 ])
 
 # LT_PROG_GCJ
index 7aa435c7b2a533022c0ecc39e44ebb14fc32e5ef..9fdadd0212d817f6e2ef509e5a668484830fe284 100644 (file)
@@ -128,8 +128,10 @@ fi
 
 eval "`$LIBTOOL --tag=lt_tag --config | $EGREP '^(wl|archive_cmds)='`"
 
-if test OBJC = lt_tag || test OBJCXX = lt_tag; then
+if test OBJC = lt_tag; then
   AT_CHECK([$LIBTOOL --config | $EGREP '^objc_compiles="no"' && (exit 77)], 1)
+elif test OBJCXX = lt_tag; then
+  AT_CHECK([$LIBTOOL --config | $EGREP '^objcxx_compiles="no"' && (exit 77)], 1)
 fi
 
 AT_CHECK([$LIBTOOL --tag=lt_tag --mode=compile $compile -c $source],
index cb16a126e20b72b63b64badea269d57e2f480a76..5299f01c444dca73232952613a9c61c626ec77b4 100644 (file)
@@ -88,7 +88,7 @@ AT_SETUP([OBJCXX inferred tag])
 LT_AT_TAG([OBJCXX])
 AT_KEYWORDS([libtool])
 
-AT_CHECK([$LIBTOOL --config | $EGREP '^objc_compiles="no"' && (exit 77)], 1)
+AT_CHECK([$LIBTOOL --config | $EGREP '^objcxx_compiles="no"' && (exit 77)], 1)
 
 AT_DATA([a.mm],
 [[