Merge branch 'dm/port2zos'
authorJunio C Hamano <gitster@pobox.com>
Wed, 29 Oct 2014 17:08:06 +0000 (10:08 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 29 Oct 2014 17:08:07 +0000 (10:08 -0700)
z/OS port

* dm/port2zos:
compat/bswap.h: detect endianness from XL C compiler macros
Makefile: reorder linker flags in the git executable rule
git-compat-util.h: support variadic macros with the XL C compiler

1  2 
Makefile
git-compat-util.h
diff --combined Makefile
index fcd51ac463a2f4ae2d748b30df36604d6190fb90,4c6847a0bed128e4bf81b1c0f4b6d9eea1cad67c..827006ba611c7e8be0ae4d92eaeaa321d7b9feb2
+++ b/Makefile
@@@ -14,11 -14,11 +14,11 @@@ all:
  # Define INLINE to a suitable substitute (such as '__inline' or '') if git
  # fails to compile with errors about undefined inline functions or similar.
  #
 -# Define SNPRINTF_RETURNS_BOGUS if your are on a system which snprintf()
 +# Define SNPRINTF_RETURNS_BOGUS if you are on a system which snprintf()
  # or vsnprintf() return -1 instead of number of characters which would
  # have been written to the final string if enough space had been available.
  #
 -# Define FREAD_READS_DIRECTORIES if your are on a system which succeeds
 +# Define FREAD_READS_DIRECTORIES if you are on a system which succeeds
  # when attempting to read from an fopen'ed directory.
  #
  # Define NO_OPENSSL environment variable if you do not have OpenSSL.
  # dependency rules.  The default is "auto", which means to use computed header
  # dependencies if your compiler is detected to support it.
  #
 -# Define CHECK_HEADER_DEPENDENCIES to check for problems in the hard-coded
 -# dependency rules.
 -#
  # Define NATIVE_CRLF if your platform uses CRLF for line endings.
  #
  # Define XDL_FAST_HASH to use an alternative line-hashing method in
@@@ -429,6 -432,7 +429,6 @@@ XDIFF_OBJS 
  VCSSVN_OBJS =
  GENERATED_H =
  EXTRA_CPPFLAGS =
 -LIB_H =
  LIB_OBJS =
  PROGRAM_OBJS =
  PROGRAMS =
@@@ -547,7 -551,6 +547,7 @@@ PROGRAMS += $(patsubst %.o,git-%$X,$(PR
  
  TEST_PROGRAMS_NEED_X += test-chmtime
  TEST_PROGRAMS_NEED_X += test-ctype
 +TEST_PROGRAMS_NEED_X += test-config
  TEST_PROGRAMS_NEED_X += test-date
  TEST_PROGRAMS_NEED_X += test-delta
  TEST_PROGRAMS_NEED_X += test-dump-cache-tree
@@@ -568,7 -571,6 +568,7 @@@ TEST_PROGRAMS_NEED_X += test-revision-w
  TEST_PROGRAMS_NEED_X += test-run-command
  TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
  TEST_PROGRAMS_NEED_X += test-sha1
 +TEST_PROGRAMS_NEED_X += test-sha1-array
  TEST_PROGRAMS_NEED_X += test-sigchain
  TEST_PROGRAMS_NEED_X += test-string-list
  TEST_PROGRAMS_NEED_X += test-subprocess
@@@ -629,11 -631,131 +629,11 @@@ VCSSVN_LIB = vcs-svn/lib.
  
  GENERATED_H += common-cmds.h
  
 -LIB_H += advice.h
 -LIB_H += archive.h
 -LIB_H += argv-array.h
 -LIB_H += attr.h
 -LIB_H += bisect.h
 -LIB_H += blob.h
 -LIB_H += branch.h
 -LIB_H += builtin.h
 -LIB_H += bulk-checkin.h
 -LIB_H += bundle.h
 -LIB_H += cache-tree.h
 -LIB_H += cache.h
 -LIB_H += color.h
 -LIB_H += column.h
 -LIB_H += commit.h
 -LIB_H += compat/bswap.h
 -LIB_H += compat/mingw.h
 -LIB_H += compat/obstack.h
 -LIB_H += compat/poll/poll.h
 -LIB_H += compat/precompose_utf8.h
 -LIB_H += compat/terminal.h
 -LIB_H += compat/win32/dirent.h
 -LIB_H += compat/win32/pthread.h
 -LIB_H += compat/win32/syslog.h
 -LIB_H += connected.h
 -LIB_H += convert.h
 -LIB_H += credential.h
 -LIB_H += csum-file.h
 -LIB_H += decorate.h
 -LIB_H += delta.h
 -LIB_H += diff.h
 -LIB_H += diffcore.h
 -LIB_H += dir.h
 -LIB_H += exec_cmd.h
 -LIB_H += ewah/ewok.h
 -LIB_H += ewah/ewok_rlw.h
 -LIB_H += fetch-pack.h
 -LIB_H += fmt-merge-msg.h
 -LIB_H += fsck.h
 -LIB_H += gettext.h
 -LIB_H += git-compat-util.h
 -LIB_H += gpg-interface.h
 -LIB_H += graph.h
 -LIB_H += grep.h
 -LIB_H += hashmap.h
 -LIB_H += help.h
 -LIB_H += http.h
 -LIB_H += kwset.h
 -LIB_H += levenshtein.h
 -LIB_H += line-log.h
 -LIB_H += line-range.h
 -LIB_H += list-objects.h
 -LIB_H += ll-merge.h
 -LIB_H += log-tree.h
 -LIB_H += mailmap.h
 -LIB_H += merge-blobs.h
 -LIB_H += merge-recursive.h
 -LIB_H += mergesort.h
 -LIB_H += notes-cache.h
 -LIB_H += notes-merge.h
 -LIB_H += notes-utils.h
 -LIB_H += notes.h
 -LIB_H += object.h
 -LIB_H += pack-objects.h
 -LIB_H += pack-revindex.h
 -LIB_H += pack.h
 -LIB_H += pack-bitmap.h
 -LIB_H += parse-options.h
 -LIB_H += patch-ids.h
 -LIB_H += pathspec.h
 -LIB_H += pkt-line.h
 -LIB_H += prio-queue.h
 -LIB_H += progress.h
 -LIB_H += prompt.h
 -LIB_H += quote.h
 -LIB_H += reachable.h
 -LIB_H += reflog-walk.h
 -LIB_H += refs.h
 -LIB_H += remote.h
 -LIB_H += rerere.h
 -LIB_H += resolve-undo.h
 -LIB_H += revision.h
 -LIB_H += run-command.h
 -LIB_H += send-pack.h
 -LIB_H += sequencer.h
 -LIB_H += sha1-array.h
 -LIB_H += sha1-lookup.h
 -LIB_H += shortlog.h
 -LIB_H += sideband.h
 -LIB_H += sigchain.h
 -LIB_H += strbuf.h
 -LIB_H += streaming.h
 -LIB_H += string-list.h
 -LIB_H += submodule.h
 -LIB_H += tag.h
 -LIB_H += tar.h
 -LIB_H += thread-utils.h
 -LIB_H += transport.h
 -LIB_H += tree-walk.h
 -LIB_H += tree.h
 -LIB_H += unpack-trees.h
 -LIB_H += unicode_width.h
 -LIB_H += url.h
 -LIB_H += urlmatch.h
 -LIB_H += userdiff.h
 -LIB_H += utf8.h
 -LIB_H += varint.h
 -LIB_H += vcs-svn/fast_export.h
 -LIB_H += vcs-svn/line_buffer.h
 -LIB_H += vcs-svn/repo_tree.h
 -LIB_H += vcs-svn/sliding_window.h
 -LIB_H += vcs-svn/svndiff.h
 -LIB_H += vcs-svn/svndump.h
 -LIB_H += walker.h
 -LIB_H += wildmatch.h
 -LIB_H += wt-status.h
 -LIB_H += xdiff-interface.h
 -LIB_H += xdiff/xdiff.h
 -LIB_H += xdiff/xdiffi.h
 -LIB_H += xdiff/xemit.h
 -LIB_H += xdiff/xinclude.h
 -LIB_H += xdiff/xmacros.h
 -LIB_H += xdiff/xprepare.h
 -LIB_H += xdiff/xtypes.h
 -LIB_H += xdiff/xutils.h
 +LIB_H = $(shell $(FIND) . \
 +      -name .git -prune -o \
 +      -name t -prune -o \
 +      -name Documentation -prune -o \
 +      -name '*.h' -print)
  
  LIB_OBJS += abspath.o
  LIB_OBJS += advice.o
@@@ -764,7 -886,6 +764,7 @@@ LIB_OBJS += submodule.
  LIB_OBJS += symlinks.o
  LIB_OBJS += tag.o
  LIB_OBJS += trace.o
 +LIB_OBJS += trailer.o
  LIB_OBJS += transport.o
  LIB_OBJS += transport-helper.o
  LIB_OBJS += tree-diff.o
@@@ -829,7 -950,6 +829,7 @@@ BUILTIN_OBJS += builtin/hash-object.
  BUILTIN_OBJS += builtin/help.o
  BUILTIN_OBJS += builtin/index-pack.o
  BUILTIN_OBJS += builtin/init-db.o
 +BUILTIN_OBJS += builtin/interpret-trailers.o
  BUILTIN_OBJS += builtin/log.o
  BUILTIN_OBJS += builtin/ls-files.o
  BUILTIN_OBJS += builtin/ls-remote.o
@@@ -905,6 -1025,11 +905,6 @@@ sysconfdir = et
  endif
  endif
  
 -ifdef CHECK_HEADER_DEPENDENCIES
 -COMPUTE_HEADER_DEPENDENCIES = no
 -USE_COMPUTED_HEADER_DEPENDENCIES =
 -endif
 -
  ifndef COMPUTE_HEADER_DEPENDENCIES
  COMPUTE_HEADER_DEPENDENCIES = auto
  endif
@@@ -1256,6 -1381,7 +1256,6 @@@ ifdef NO_INET_PTO
  endif
  ifndef NO_UNIX_SOCKETS
        LIB_OBJS += unix-socket.o
 -      LIB_H += unix-socket.h
        PROGRAM_OBJS += credential-cache.o
        PROGRAM_OBJS += credential-cache--daemon.o
  endif
@@@ -1279,10 -1405,12 +1279,10 @@@ endi
  ifdef BLK_SHA1
        SHA1_HEADER = "block-sha1/sha1.h"
        LIB_OBJS += block-sha1/sha1.o
 -      LIB_H += block-sha1/sha1.h
  else
  ifdef PPC_SHA1
        SHA1_HEADER = "ppc/sha1.h"
        LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
 -      LIB_H += ppc/sha1.h
  else
  ifdef APPLE_COMMON_CRYPTO
        COMPAT_CFLAGS += -DCOMMON_DIGEST_FOR_OPENSSL
@@@ -1351,9 -1479,6 +1351,9 @@@ ifdef NO_REGE
        COMPAT_CFLAGS += -Icompat/regex
        COMPAT_OBJS += compat/regex/regex.o
  endif
 +ifdef NATIVE_CRLF
 +      BASIC_CFLAGS += -DNATIVE_CRLF
 +endif
  
  ifdef USE_NED_ALLOCATOR
         COMPAT_CFLAGS += -Icompat/nedmalloc
@@@ -1610,8 -1735,8 +1610,8 @@@ git.sp git.s git.o: EXTRA_CPPFLAGS = 
        '-DGIT_INFO_PATH="$(infodir_relative_SQ)"'
  
  git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)
-       $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
-               $(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
+       $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) git.o \
+               $(BUILTIN_OBJS) $(LIBS)
  
  help.sp help.s help.o: common-cmds.h
  
@@@ -1812,13 -1937,29 +1812,13 @@@ $(dep_dirs)
  missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs))
  dep_file = $(dir $@).depend/$(notdir $@).d
  dep_args = -MF $(dep_file) -MQ $@ -MMD -MP
 -ifdef CHECK_HEADER_DEPENDENCIES
 -$(error cannot compute header dependencies outside a normal build. \
 -Please unset CHECK_HEADER_DEPENDENCIES and try again)
 -endif
  endif
  
  ifneq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
 -ifndef CHECK_HEADER_DEPENDENCIES
  dep_dirs =
  missing_dep_dirs =
  dep_args =
  endif
 -endif
 -
 -ifdef CHECK_HEADER_DEPENDENCIES
 -ifndef PRINT_HEADER_DEPENDENCIES
 -missing_deps = $(filter-out $(notdir $^), \
 -      $(notdir $(shell $(MAKE) -s $@ \
 -              CHECK_HEADER_DEPENDENCIES=YesPlease \
 -              USE_COMPUTED_HEADER_DEPENDENCIES=YesPlease \
 -              PRINT_HEADER_DEPENDENCIES=YesPlease)))
 -endif
 -endif
  
  ASM_SRC := $(wildcard $(OBJECTS:o=S))
  ASM_OBJ := $(ASM_SRC:S=o)
@@@ -1826,10 -1967,45 +1826,10 @@@ C_OBJ := $(filter-out $(ASM_OBJ),$(OBJE
  
  .SUFFIXES:
  
 -ifdef PRINT_HEADER_DEPENDENCIES
 -$(C_OBJ): %.o: %.c FORCE
 -      echo $^
 -$(ASM_OBJ): %.o: %.S FORCE
 -      echo $^
 -
 -ifndef CHECK_HEADER_DEPENDENCIES
 -$(error cannot print header dependencies during a normal build. \
 -Please set CHECK_HEADER_DEPENDENCIES and try again)
 -endif
 -endif
 -
 -ifndef PRINT_HEADER_DEPENDENCIES
 -ifdef CHECK_HEADER_DEPENDENCIES
 -$(C_OBJ): %.o: %.c $(dep_files) FORCE
 -      @set -e; echo CHECK $@; \
 -      missing_deps="$(missing_deps)"; \
 -      if test "$$missing_deps"; \
 -      then \
 -              echo missing dependencies: $$missing_deps; \
 -              false; \
 -      fi
 -$(ASM_OBJ): %.o: %.S $(dep_files) FORCE
 -      @set -e; echo CHECK $@; \
 -      missing_deps="$(missing_deps)"; \
 -      if test "$$missing_deps"; \
 -      then \
 -              echo missing dependencies: $$missing_deps; \
 -              false; \
 -      fi
 -endif
 -endif
 -
 -ifndef CHECK_HEADER_DEPENDENCIES
  $(C_OBJ): %.o: %.c GIT-CFLAGS $(missing_dep_dirs)
        $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
  $(ASM_OBJ): %.o: %.S GIT-CFLAGS $(missing_dep_dirs)
        $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
 -endif
  
  %.s: %.c GIT-CFLAGS FORCE
        $(QUIET_CC)$(CC) -o $@ -S $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
@@@ -1956,9 -2132,9 +1956,9 @@@ XGETTEXT_FLAGS_C = $(XGETTEXT_FLAGS) --
  XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell \
        --keyword=gettextln --keyword=eval_gettextln
  XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --keyword=__ --language=Perl
 -LOCALIZED_C := $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
 -LOCALIZED_SH := $(SCRIPT_SH)
 -LOCALIZED_PERL := $(SCRIPT_PERL)
 +LOCALIZED_C = $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
 +LOCALIZED_SH = $(SCRIPT_SH)
 +LOCALIZED_PERL = $(SCRIPT_PERL)
  
  ifdef XGETTEXT_INCLUDE_TESTS
  LOCALIZED_C += t/t0200/test.c
@@@ -1966,7 -2142,7 +1966,7 @@@ LOCALIZED_SH += t/t0200/test.s
  LOCALIZED_PERL += t/t0200/test.perl
  endif
  
 -po/git.pot: $(LOCALIZED_C)
 +po/git.pot: $(GENERATED_H) FORCE
        $(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C)
        $(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_SH) \
                $(LOCALIZED_SH)
diff --combined git-compat-util.h
index fc83339bd765a978b372c2baddb51e54693d05bc,bf3a053a26a7436f46c820fe5782ba7d10934df1..400e92108687e31dd16fbcea1a43e04556b98566
@@@ -82,7 -82,6 +82,7 @@@
  #define _ALL_SOURCE 1
  #define _GNU_SOURCE 1
  #define _BSD_SOURCE 1
 +#define _DEFAULT_SOURCE 1
  #define _NETBSD_SOURCE 1
  #define _SGI_SOURCE 1
  
@@@ -192,7 -191,7 +192,7 @@@ extern int compat_mkdir_wo_trailing_sla
  struct itimerval {
        struct timeval it_interval;
        struct timeval it_value;
 -}
 +};
  #endif
  
  #ifdef NO_SETITIMER
@@@ -265,35 -264,19 +265,35 @@@ extern char *gitbasename(char *)
  #endif
  
  #ifndef has_dos_drive_prefix
 -#define has_dos_drive_prefix(path) 0
 +static inline int git_has_dos_drive_prefix(const char *path)
 +{
 +      return 0;
 +}
 +#define has_dos_drive_prefix git_has_dos_drive_prefix
  #endif
  
 -#ifndef offset_1st_component
 -#define offset_1st_component(path) (is_dir_sep((path)[0]))
 +#ifndef is_dir_sep
 +static inline int git_is_dir_sep(int c)
 +{
 +      return c == '/';
 +}
 +#define is_dir_sep git_is_dir_sep
  #endif
  
 -#ifndef is_dir_sep
 -#define is_dir_sep(c) ((c) == '/')
 +#ifndef offset_1st_component
 +static inline int git_offset_1st_component(const char *path)
 +{
 +      return is_dir_sep(path[0]);
 +}
 +#define offset_1st_component git_offset_1st_component
  #endif
  
  #ifndef find_last_dir_sep
 -#define find_last_dir_sep(path) strrchr(path, '/')
 +static inline char *git_find_last_dir_sep(const char *path)
 +{
 +      return strrchr(path, '/');
 +}
 +#define find_last_dir_sep git_find_last_dir_sep
  #endif
  
  #if defined(__HP_cc) && (__HP_cc >= 61000)
  
  #include "wildmatch.h"
  
 +struct strbuf;
 +
  /* General helper functions */
  extern void vreportf(const char *prefix, const char *err, va_list params);
  extern void vwritef(int fd, const char *prefix, const char *err, va_list params);
@@@ -596,11 -577,6 +596,11 @@@ int inet_pton(int af, const char *src, 
  const char *inet_ntop(int af, const void *src, char *dst, size_t size);
  #endif
  
 +#ifdef NO_PTHREADS
 +#define atexit git_atexit
 +extern int git_atexit(void (*handler)(void));
 +#endif
 +
  extern void release_pack_memory(size_t);
  
  typedef void (*try_to_free_t)(size_t);
@@@ -617,7 -593,6 +617,7 @@@ extern try_to_free_t set_try_to_free_ro
  extern char *xstrdup(const char *str);
  extern void *xmalloc(size_t size);
  extern void *xmallocz(size_t size);
 +extern void *xmallocz_gently(size_t size);
  extern void *xmemdupz(const void *data, size_t len);
  extern char *xstrndup(const char *str, size_t len);
  extern void *xrealloc(void *ptr, size_t size);
@@@ -632,9 -607,6 +632,9 @@@ extern int xmkstemp(char *template)
  extern int xmkstemp_mode(char *template, int mode);
  extern int odb_mkstemp(char *template, size_t limit, const char *pattern);
  extern int odb_pack_keep(char *name, size_t namesz, const unsigned char *sha1);
 +extern char *xgetcwd(void);
 +
 +#define REALLOC_ARRAY(x, alloc) (x) = xrealloc((x), (alloc) * sizeof(*(x)))
  
  static inline size_t xsize_t(off_t len)
  {
@@@ -684,7 -656,7 +684,7 @@@ extern const unsigned char sane_ctype[2
  #define iscntrl(x) (sane_istest(x,GIT_CNTRL))
  #define ispunct(x) sane_istest(x, GIT_PUNCT | GIT_REGEX_SPECIAL | \
                GIT_GLOB_SPECIAL | GIT_PATHSPEC_MAGIC)
 -#define isxdigit(x) (hexval_table[x] != -1)
 +#define isxdigit(x) (hexval_table[(unsigned char)(x)] != -1)
  #define tolower(x) sane_case((unsigned char)(x), 0x20)
  #define toupper(x) sane_case((unsigned char)(x), 0)
  #define is_pathspec_magic(x) sane_istest(x,GIT_PATHSPEC_MAGIC)
@@@ -778,27 -750,17 +778,27 @@@ void git_qsort(void *base, size_t nmemb
  #endif
  #endif
  
- #if defined(__GNUC__) || (_MSC_VER >= 1400)
+ #if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__C99_MACRO_WITH_VA_ARGS)
  #define HAVE_VARIADIC_MACROS 1
  #endif
  
  /*
   * Preserves errno, prints a message, but gives no warning for ENOENT.
 - * Always returns the return value of unlink(2).
 + * Returns 0 on success, which includes trying to unlink an object that does
 + * not exist.
   */
  int unlink_or_warn(const char *path);
 + /*
 +  * Tries to unlink file.  Returns 0 if unlink succeeded
 +  * or the file already didn't exist.  Returns -1 and
 +  * appends a message to err suitable for
 +  * 'error("%s", err->buf)' on error.
 +  */
 +int unlink_or_msg(const char *file, struct strbuf *err);
  /*
 - * Likewise for rmdir(2).
 + * Preserves errno, prints a message, but gives no warning for ENOENT.
 + * Returns 0 on success, which includes trying to remove a directory that does
 + * not exist.
   */
  int rmdir_or_warn(const char *path);
  /*