Thread (101 messages) 101 messages, 10 authors, 2020-07-01

Re: [PATCH v2 08/11] cmake: added checks for struct stat and libiconv

From: Sibi Siddharthan <hidden>
Date: 2020-05-14 18:31:35

On Thu, May 14, 2020 at 9:01 PM Đoàn Trần Công Danh
[off-list ref] wrote:
On 2020-05-12 16:50:51+0000, Sibi Siddharthan via GitGitGadget [off-list ref] wrote:
quoted
From: Sibi Siddharthan <redacted>

The CMake script now checks whether st_blocks is a member of struct stat
and set the compile definition NO_ST_BLOCKS_IN_STRUCT_STAT accordingly.

The check for whether ICONV_OMITS_BOM is also added as requested by Danh.
Please don't write my name in the commit message like this.
This maybe rephased to:

        While we're as it, add the check for ICONV_OMITS_BOM.
Sure, will remove your name from the message.
I added it because gitgitgadget PR bot suggested it as a good practice.
quoted
Signed-off-by: Sibi Siddharthan <redacted>
---
 CMakeLists.txt | 59 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 57 insertions(+), 2 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4353080b708..975791c8b89 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,6 +22,7 @@ project(git
 include(CheckTypeSize)
 include(CheckCSourceRuns)
 include(CheckCSourceCompiles)
+include(CheckCSourceRuns)
 include(CheckIncludeFile)
 include(CheckFunctionExists)
 include(CheckSymbolExists)
@@ -128,7 +129,7 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
      include_directories(compat/win32)
      add_compile_definitions(HAVE_ALLOCA_H NO_POSIX_GOODIES NATIVE_CRLF NO_UNIX_SOCKETS WIN32
                              _CONSOLE DETECT_MSYS_TTY STRIP_EXTENSION=".exe"  NO_SYMLINK_HEAD UNRELIABLE_FSTAT
-                             NOGDI OBJECT_CREATION_MODE=1 __USE_MINGW_ANSI_STDIO=0 NO_ST_BLOCKS_IN_STRUCT_STAT
+                             NOGDI OBJECT_CREATION_MODE=1 __USE_MINGW_ANSI_STDIO=0
                              USE_NED_ALLOCATOR OVERRIDE_STRDUP MMAP_PREVENTS_DELETE USE_WIN32_MMAP
                              UNICODE _UNICODE HAVE_WPGMPTR ENSURE_MSYSTEM_IS_SET)
      list(APPEND compat_SOURCES compat/mingw.c compat/winansi.c compat/win32/path-utils.c
@@ -280,6 +281,11 @@ if(HAVE_CLOCK_MONOTONIC)
      add_compile_definitions(HAVE_CLOCK_MONOTONIC)
 endif()

+#check for st_blocks in struct stat
+check_struct_has_member("struct stat" st_blocks "sys/stat.h" STRUCT_STAT_HAS_ST_BLOCKS)
+if(NOT STRUCT_STAT_HAS_ST_BLOCKS)
+     add_compile_definitions(NO_ST_BLOCKS_IN_STRUCT_STAT)
+endif()

 #compile checks
 check_c_source_runs("
@@ -344,7 +350,6 @@ if(NOT HAVE_REGEX)
      add_compile_definitions(NO_REGEX NO_MBSUPPORT GAWK)
 endif()

-
 check_c_source_compiles("
 #include <stddef.h>
 #include <sys/types.h>
@@ -368,6 +373,56 @@ if(HAVE_BSD_SYSCTL)
      add_compile_definitions(HAVE_BSD_SYSCTL)
 endif()

+set(CMAKE_REQUIRED_LIBRARIES ${Iconv_LIBRARIES})
+set(CMAKE_REQUIRED_INCLUDES ${Iconv_INCLUDE_DIRS})
+
+check_c_source_compiles("
+#include <iconv.h>
+
+extern size_t iconv(iconv_t cd,
+             char **inbuf, size_t *inbytesleft,
+             char **outbuf, size_t *outbytesleft);
+
+int main(){return 0;}"
+HAVE_NEW_ICONV)
+if(HAVE_NEW_ICONV)
+     set(HAVE_OLD_ICONV 0)
+else()
+     set(HAVE_OLD_ICONV 1)
+endif()
+
+check_c_source_runs("
+#include <iconv.h>
+#if ${HAVE_OLD_ICONV}
+typedef const char *iconv_ibp;
+#else
+typedef char *iconv_ibp;
+#endif
+
+int main()
+{
+     int v;
+     iconv_t conv;
+     char in[] = \"a\"; iconv_ibp pin = in;
+     char out[20] = \"\"; char *pout = out;
+     size_t isz = sizeof in;
+     size_t osz = sizeof out;
+
+     conv = iconv_open(\"UTF-16\", \"UTF-8\");
+     iconv(conv, &pin, &isz, &pout, &osz);
+     iconv_close(conv);
+     v = (unsigned char)(out[0]) + (unsigned char)(out[1]);
+     return v != 0xfe + 0xff;
+}"
I think the closing double-quote should be placed in a newline,
in order to make sure the source file ended with newline,
old C standard requires final newline.
Okay

Thank You,
Sibi Siddharthan
--
Danh
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help