git/list[1] front-page[2] threads[3] people[4] search[5] about
 

RE: git on HP NonStop

From
Joachim Schmitz <jojo@schmitz-digital.de>
Date
Aug 14, 2012, 15:52 UTC
Message-ID
<004b01cd7a34$dbf2c160$93d84420$@schmitz-digital.de>
In-Reply-To
<7vr4r98rfd.fsf@alter.siamese.dyndns.org>
Show 11 quoted lines
> From: Junio C Hamano [mailto:gitster@pobox.com]
> Sent: Tuesday, August 14, 2012 4:44 PM
> To: Joachim Schmitz
> Subject: Re: git on HP NonStop
> 
> "Joachim Schmitz" <jojo@schmitz-digital.de> writes:
> 
> > Interesting, I never mentioned Tandem did I, But still you recognized
> > HP NonStop as that.
> 
> No, *you* did in your patch "#ifdef".
Ah, I see.
> > Well, I do care about that platform,  but if you don't, there's not
> > much point in me trying to get Tandem specific patches applied, is it?
> 
> As long as the change is isolated (i.e. compilation without "#define
TANDEM"
__TANDEM actually
> for other people will produce byte-for-byte identical result as before),
and
> cleanly made (i.e. the resulting source code is not littered with "#ifdef
> TANDEM" in many places), I do not think there is a reason not to have such
a
> patchset.

It isn't in many places, only 2 places in git-compat-util.h so far: /usr/local/bin/diff -EBbu ./git-compat-util.h.orig ./git-compat-util.h --- ./git-compat-util.h.orig 2012-07-30 15:50:38 -0500 +++ ./git-compat-util.h 2012-08-12 11:26:46 -0500

@@ -74,7 +74,8 @@
 # define _XOPEN_SOURCE 500
 # endif
 #elif !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__USLC__) &&
\
-      !defined(_M_UNIX) && !defined(__sgi) && !defined(__DragonFly__)
+      !defined(_M_UNIX) && !defined(__sgi) && !defined(__DragonFly__) && \
+      !defined(__TANDEM)
 #define _XOPEN_SOURCE 600 /* glibc2 and AIX 5.3L need 500, OpenBSD needs
600 for S_ISLNK() */
 #define _XOPEN_SOURCE_EXTENDED 1 /* AIX 5.3L needs this */
 #endif
 @@ -98,6 +99,11 @@
 #include <stdlib.h>
 #include <stdarg.h>
 #include <string.h>
+#ifdef __TANDEM
+# include <strings.h> /* for strcasecmp() */
+  typedef int intptr_t; /* not "int *" ?!? */
+  typedef unsigned int uintptr_t; /* not "unsigned int *" ?!? */
+#endif
 #include <errno.h>
 #include <limits.h>
 #include <sys/param.h>

Too much? The 2nd part is not necessary NonStop specific, any idea for a
better way?

There there's Makefile:
/usr/local/bin/diff -EBbu ./Makefile.orig ./Makefile
--- ./Makefile.orig     2012-07-30 15:50:38 -0500
+++ ./Makefile  2012-08-14 06:07:16 -0500
@@ -1297,6 +1297,45 @@
        NO_CURL =
        NO_EXPAT =
 endif
+ifeq ($(uname_S),NONSTOP_KERNEL)
+       CC = cc -c99 # needs some C99 features, "inline" is just one of them
+       CFLAGS= -g -O
+       prefix = /usr/local
+
+       # as detected by './configure'
+       #NO_CURL = YesPlease # missdetected, disabled, see below
+       NEEDS_SSL_WITH_CURL = YesPlease # added manually, see above
+       HAVE_LIBCHARSET_H=YesPlease
+       NEEDS_LIBICONV = YesPlease # needs libiconv first, changed further
down
+       NO_SYS_SELECT_H=UnfortunatelyYes
+       NO_D_TYPE_IN_DIRENT = YesPlease
+       NO_HSTRERROR=YesPlease
+       NO_STRCASESTR=YesPlease
+       NO_FNMATCH_CASEFOLD = YesPlease
+       NO_MEMMEM = YesPlease
+       NO_STRLCPY = YesPlease
+       NO_SETENV = YesPlease
+       NO_UNSETENV = YesPlease
+       NO_MKDTEMP = YesPlease
+       NO_MKSTEMPS = YesPlease
+       OLD_ICONV=UnfortunatelyYes # currently libiconv-1.9.1
+       NO_REGEX=YesPlease # Why? ToDo?
+       NO_PTHREADS=UnfortunatelyYes # ToDo? Using PUT, maybe?
+
+       # our's are in ${prefix}/bin
+       PERL_PATH = ${prefix}/bin/perl
+       PYTHON_PATH = ${prefix}/bin/python
+
+       # not detected (nor checked for) by './configure'
+       COMPAT_CFLAGS += -DSA_RESTART=0 # we don't have SA_RESTART on
NonStop
+       COMPAT_CFLAGS += -DHAVE_STRING_H=1 # needed in
compat/fnmatch/fnmatch.c
+       NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease # we don't have that on
NonStop
+       NO_NSEC = YesPlease # we don't have that on NonStop
+       NO_PREAD = YesPlease # we could use floss_pread though?
+       NO_MMAP = YesPlease # we could use floss_mmap though?
+       # newly implemented further down
+       NO_POLL = YesPlease # we could use floss_poll though?
+endif
 ifneq (,$(findstring MINGW,$(uname_S)))
        pathsep = ;
        NO_PREAD = YesPlease
@@ -1526,6 +1565,11 @@
        LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto
 endif
 endif
+ifndef NO_GETTEXT
+ifndef LIBC_CONTAINS_LIBINTL
+       EXTLIBS += -lintl
+endif
+endif
 ifdef NEEDS_LIBICONV
        ifdef ICONVDIR
                BASIC_CFLAGS += -I$(ICONVDIR)/include
@@ -1538,11 +1582,6 @@
 ifdef NEEDS_LIBGEN
        EXTLIBS += -lgen
 Endif
-ifndef NO_GETTEXT
-ifndef LIBC_CONTAINS_LIBINTL
-       EXTLIBS += -lintl
-endif
-endif
 ifdef NEEDS_SOCKET
        EXTLIBS += -lsocket
 endif
@@ -1591,6 +1630,11 @@
        BASIC_CFLAGS += -DNO_GETTEXT
        USE_GETTEXT_SCHEME ?= fallthrough
 endif
+ifdef NO_POLL
+       NO_SYS_POLL_H = YesPlease
+       COMPAT_CFLAGS += -DNO_POLL -Icompat/win32 # so it finds poll.h
+       COMPAT_OBJS += compat/win32/poll.o
+endif
 ifdef NO_STRCASESTR
        COMPAT_CFLAGS += -DNO_STRCASESTR
        COMPAT_OBJS += compat/strcasestr.o

How das that look to you?

> >> Finally, I would prefer to see any message that is addressed to me as
> >> the project maintainer to be Cc'ed to the list.  I feel 80% of my
> >> time writing
> > this
> >> message wasted, as the contents of it would have helped not just you
> >> but 4 other people who want to get their toes in the development
> >> community, but you robbed them the chance of seeing it.
> >
> > Sorry for having wasted your time, but you could just as easily have
> > CCed the list on your reply, couldn't you?
> 
> No, responding to a private message in public without permission goes
against
> generally accepted netiquette (I am OK if you respond to this or to the
previous
> message from me in public).

OK, understood and accepted. Herewith you have my permission ;-)

> > The use of getrlimit(RLIMIT_NOFILE, ...) vs. sysconf(_SC_OPEN_MAX) in
> > sha1_file.c, I believe the later to be more portable, also it is used
> > in other places already (namely compat/win32/poll.c)
> 
> Careful.  Getting rid of the use of getrlimit() from shared code by
introducing
> our own abstraction to be implemented in compat/* for each platform is
fine,
> but that does not mean sysconf() is acceptable by all platforms (your
finding
> use of sysconf() in compat/win32 merely means Win is OK with it).

Well. NonStop is OK with it too. 
And I've brackets with #ifdef _SC_OPEN_MAX, just like in compat/win23:
/usr/local/bin/diff -EBbu ./sha1_file.c.orig ./sha1_file.c
--- ./sha1_file.c.orig  2012-07-30 15:50:38 -0500
+++ ./sha1_file.c       2012-08-14 02:42:03 -0500
@@ -747,6 +747,9 @@
                return error("packfile %s index unavailable", p->pack_name);

        if (!pack_max_fds) {
+#ifdef _SC_OPEN_MAX
+               unsigned int max_fds = sysconf(_SC_OPEN_MAX);
+#else
                struct rlimit lim;
                unsigned int max_fds;

@@ -754,6 +757,7 @@
                        die_errno("cannot get RLIMIT_NOFILE");

                max_fds = lim.rlim_cur;
+#endif

                /* Save 3 for stdin/stdout/stderr, 22 for work */
                if (25 < max_fds)
 
Can it get any better?

> > The use of curl_easy_strerror() in help.c without checking for a
> > proper curl version (>=7.12.0)
> 
> I do not recall the minimum version of curl we support offhand, but if
there is a
> clean workaround that would be good.

Well, I really have none but to disable that part:
/usr/local/bin/diff -EBbu ./http.c.orig ./http.c
--- ./http.c.orig       2012-07-30 15:50:38 -0500
+++ ./http.c    2012-08-14 02:49:43 -0500
@@ -805,10 +805,12 @@
                                ret = HTTP_REAUTH;
                        }
                } else {
+#if LIBCURL_VERSION_NUM >= 0x070c00 /* no curl_easy_strerror() before that
*/
                        if (!curl_errorstr[0])
                                strlcpy(curl_errorstr,
 
curl_easy_strerror(results.curl_result),
                                        sizeof(curl_errorstr));
+#endif
                        ret = HTTP_ERROR;
                }
        } else {


It certainly is a workaround, whether it is clean or clean enough for now is
to you to decide ;-)

Bye, Jojo
Next: Jan Engelhardt
Message 1 of 11 in “RE: git on HP NonStop”
  1. Joachim SchmitzAug 14, 2012
  2. Jan EngelhardtAug 19, 2012
  3. Joachim SchmitzAug 20, 2012
  4. Johannes SixtAug 20, 2012
  5. Joachim SchmitzAug 20, 2012
  6. Junio C HamanoAug 20, 2012
  7. Joachim SchmitzAug 20, 2012
  8. Junio C HamanoAug 21, 2012
  9. Joachim SchmitzAug 22, 2012
  10. Andreas EricssonAug 23, 2012
  11. Joachim SchmitzAug 23, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.