sortix-mirror/ports/git/git.patch
Jonas 'Sortie' Termansen 9588b0d3db Add ports to the Sortix repository.
This change imports the ports collection from the former porttix and srctix
repositories and converts them to port(5) files with metadata pointing to
the upstream release tarballs with patches checked into this repository.
Ports are now developed and versioned along with the operating system and
are automatically built per the PACKAGES environment variable. The patches
are licensed under the same license as the relevant ports.

Tix has gained support for the new port(5) format. tix-port(8) is the new
high level ports build even point that handles downloading pstream releases
into the new mirror cache directory, applying the patches, building the port
with the lower-level tix-build(8), and finally installing the binary
package. The new tix-vars(8) program parses port(5) files and the new
tix-rmdiff(8) program produces input for tix-rmpatch(8).

The old doc/ directory is discontinued in favor of manual pages documenting
the new ports system.

The obsolete porttix-create(8) and srctix-create(8) programs are removed.
2022-06-13 22:29:53 +02:00

430 lines
12 KiB
Diff

diff -Paur --no-dereference -- git.upstream/builtin/log.c git/builtin/log.c
--- git.upstream/builtin/log.c
+++ git/builtin/log.c
@@ -249,7 +249,12 @@
fprintf(rev->diffopt.file, _("Final output: %d %s\n"), nr, stage);
}
+/* PATCH: Sortix does not have obsolescent XSI itimers. */
+#if defined(__sortix__)
+static timer_t early_output_timer;
+#else
static struct itimerval early_output_timer;
+#endif
static void log_show_early(struct rev_info *revs, struct commit_list *list)
{
@@ -297,9 +302,18 @@
* trigger every second even if we're blocked on a
* reader!
*/
+#if defined(__sortix__)
+ struct itimerspec its;
+ its.it_value.tv_sec = 0;
+ its.it_value.tv_nsec = 500000000;
+ its.it_interval.tv_sec = 0;
+ its.it_interval.tv_nsec = 0;
+ timer_settime(early_output_timer, 0, &its, NULL);
+#else
early_output_timer.it_value.tv_sec = 0;
early_output_timer.it_value.tv_usec = 500000;
setitimer(ITIMER_REAL, &early_output_timer, NULL);
+#endif
}
static void early_output(int signal)
@@ -309,6 +323,13 @@
static void setup_early_output(struct rev_info *rev)
{
+#if defined(__sortix__) && !defined(__SORTIX_HAS_RESTARTABLE_SYSCALLS__)
+ /* TODO: Sortix doesn't have restartable system calls at the moment and this
+ feature creates spurious failures, so this feature is disabled for
+ now. */
+ return;
+#endif
+
struct sigaction sa;
/*
@@ -331,13 +352,37 @@
*
* This is a one-time-only trigger.
*/
+#if defined(__sortix__)
+ struct sigevent sev;
+ memset(&sev, 0, sizeof(sev));
+ sev.sigev_notify = SIGEV_SIGNAL;
+ sev.sigev_signo = SIGALRM;
+ timer_create(CLOCK_MONOTONIC, &sev, &early_output_timer);
+ struct itimerspec its;
+ its.it_value.tv_sec = 0;
+ its.it_value.tv_nsec = 100000000;
+ its.it_interval.tv_sec = 0;
+ its.it_interval.tv_nsec = 0;
+ timer_settime(early_output_timer, 0, &its, NULL);
+#else
early_output_timer.it_value.tv_sec = 0;
early_output_timer.it_value.tv_usec = 100000;
setitimer(ITIMER_REAL, &early_output_timer, NULL);
+#endif
}
static void finish_early_output(struct rev_info *rev)
{
+#if defined(__sortix__) && !defined(__SORTIX_HAS_RESTARTABLE_SYSCALLS__)
+ /* TODO: Sortix doesn't have restartable system calls at the moment and this
+ feature creates spurious failures, so this feature is disabled for
+ now. */
+ return;
+#endif
+
+#if defined(__sortix__)
+ timer_delete(early_output_timer);
+#endif
int n = estimate_commit_count(rev, rev->commits);
signal(SIGALRM, SIG_IGN);
show_early_header(rev, "done", n);
diff -Paur --no-dereference -- git.upstream/compat/hstrerror.c git/compat/hstrerror.c
--- git.upstream/compat/hstrerror.c
+++ git/compat/hstrerror.c
@@ -2,6 +2,10 @@
#include <stdio.h>
#include <netdb.h>
+/* PATCH: hstrerror(3) is not used by git when getaddrinfo(3) is available.
+ Sortix has the modern getaddrinfo(3), but does not have the obsolete
+ gethostbyname(3). */
+#ifdef NO_IPV6
const char *githstrerror(int err)
{
static char buffer[48];
@@ -19,3 +23,4 @@
snprintf(buffer, sizeof(buffer), "Name resolution error %d", err);
return buffer;
}
+#endif
diff -Paur --no-dereference -- git.upstream/config.mak.uname git/config.mak.uname
--- git.upstream/config.mak.uname
+++ git/config.mak.uname
@@ -17,6 +17,8 @@
# because maintaining the nesting to match is a pain. If
# we had "elif" things would have been much nicer...
+# PATCH: Assume unknown operating systems have /dev/tty as required by POSIX.
+HAVE_DEV_TTY = YesPlease
ifeq ($(uname_S),OSF1)
# Need this for u_short definitions et al
BASIC_CFLAGS += -D_OSF_SOURCE
diff -Paur --no-dereference -- git.upstream/configure git/configure
--- git.upstream/configure
+++ git/configure
@@ -5315,7 +5315,7 @@
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcurl $LIBS"
+LIBS="-lcurl -lssl -lcrypto -lz $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -5364,52 +5364,13 @@
if test -z "$NO_CURL"; then
-# Extract the first word of "curl-config", so it can be a program name with args.
-set dummy curl-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CURL_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CURL_CONFIG"; then
- ac_cv_prog_CURL_CONFIG="$CURL_CONFIG" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CURL_CONFIG="curl-config"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_prog_CURL_CONFIG" && ac_cv_prog_CURL_CONFIG="no"
-fi
-fi
-CURL_CONFIG=$ac_cv_prog_CURL_CONFIG
-if test -n "$CURL_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CURL_CONFIG" >&5
-$as_echo "$CURL_CONFIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-if test $CURL_CONFIG != no; then
+# PATCH: pkg-config must be used instead of the bad curl-config.
config_appended_defs="$config_appended_defs${newline}CURL_CONFIG=${CURL_CONFIG}"
if test -z "${NO_OPENSSL}"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if Curl supports SSL" >&5
$as_echo_n "checking if Curl supports SSL... " >&6; }
- if test $(curl-config --features|grep SSL) = SSL; then
+ if test -n "$(${PKG_CONFIG:-pkg-config} libcurl --variable=supported_features|grep SSL)"; then
NEEDS_SSL_WITH_CURL=YesPlease
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
@@ -5423,8 +5384,6 @@
fi
fi
-fi
-
#
# Define NO_EXPAT if you do not have expat installed. git-http-push is
diff -Paur --no-dereference -- git.upstream/git-compat-util.h git/git-compat-util.h
--- git.upstream/git-compat-util.h
+++ git/git-compat-util.h
@@ -325,6 +325,10 @@
typedef uintmax_t timestamp_t;
#define PRItime PRIuMAX
#define parse_timestamp strtoumax
+/* PATCH: Avoid conflicting Sortix macro. */
+#ifdef TIME_MAX
+#undef TIME_MAX
+#endif
#define TIME_MAX UINTMAX_MAX
#ifndef PATH_SEP
diff -Paur --no-dereference -- git.upstream/lockfile.c git/lockfile.c
--- git.upstream/lockfile.c
+++ git/lockfile.c
@@ -105,16 +105,10 @@
int n = 1;
int multiplier = 1;
long remaining_ms = 0;
- static int random_initialized = 0;
if (timeout_ms == 0)
return lock_file(lk, path, flags);
- if (!random_initialized) {
- srand((unsigned int)getpid());
- random_initialized = 1;
- }
-
if (timeout_ms > 0)
remaining_ms = timeout_ms;
@@ -133,7 +127,8 @@
backoff_ms = multiplier * INITIAL_BACKOFF_MS;
/* back off for between 0.75*backoff_ms and 1.25*backoff_ms */
- wait_ms = (750 + rand() % 500) * backoff_ms / 1000;
+ /* PATCH: Avoid rand(3) warning and modulo bias. */
+ wait_ms = (750 + arc4random_uniform(500)) * backoff_ms / 1000;
sleep_millisec(wait_ms);
remaining_ms -= wait_ms;
diff -Paur --no-dereference -- git.upstream/Makefile git/Makefile
--- git.upstream/Makefile
+++ git/Makefile
@@ -1176,9 +1176,7 @@
endif
ifdef NEEDS_SSL_WITH_CURL
CURL_LIBCURL += -lssl
- ifdef NEEDS_CRYPTO_WITH_SSL
- CURL_LIBCURL += -lcrypto
- endif
+ CURL_LIBCURL += -lcrypto
endif
ifdef NEEDS_IDN_WITH_CURL
CURL_LIBCURL += -lidn
@@ -1252,6 +1250,12 @@
LIB_4_CRYPTO += -framework Security -framework CoreFoundation
endif
endif
+# PATCH: Link with libintl first so it can statically link with libiconv.
+ifndef NO_GETTEXT
+ifndef LIBC_CONTAINS_LIBINTL
+ EXTLIBS += -lintl
+endif
+endif
ifdef NEEDS_LIBICONV
ifdef ICONVDIR
BASIC_CFLAGS += -I$(ICONVDIR)/include
@@ -1259,19 +1263,11 @@
else
ICONV_LINK =
endif
- ifdef NEEDS_LIBINTL_BEFORE_LIBICONV
- ICONV_LINK += -lintl
- endif
EXTLIBS += $(ICONV_LINK) -liconv
endif
ifdef NEEDS_LIBGEN
EXTLIBS += -lgen
endif
-ifndef NO_GETTEXT
-ifndef LIBC_CONTAINS_LIBINTL
- EXTLIBS += -lintl
-endif
-endif
ifdef NEEDS_SOCKET
EXTLIBS += -lsocket
endif
@@ -2184,8 +2180,10 @@
doc:
$(MAKE) -C Documentation all
+# PATCH: Build manual pages if asciidoc and xmlto are installed.
+all:: man
man:
- $(MAKE) -C Documentation man
+ if which asciidoc 1>/dev/null 2>/dev/null && which xmlto 1>/dev/null 2>/dev/null; then $(MAKE) -C Documentation man; fi
html:
$(MAKE) -C Documentation html
@@ -2502,7 +2500,7 @@
profile-fast-install: profile-fast
$(MAKE) install
-install: all
+install: all install-man
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
@@ -2570,8 +2568,9 @@
install-doc:
$(MAKE) -C Documentation install
+# PATCH: Install manual pages if asciidoc and xmlto are installed.
install-man:
- $(MAKE) -C Documentation install-man
+ if which asciidoc 1>/dev/null 2>/dev/null && which xmlto 1>/dev/null 2>/dev/null; then $(MAKE) -C Documentation install-man; fi
install-html:
$(MAKE) -C Documentation install-html
@@ -2638,8 +2637,8 @@
### Cleaning rules
+# PATCH: Don't delete configure when making distclean because it is in the dist.
distclean: clean
- $(RM) configure
$(RM) config.log config.status config.cache
$(RM) config.mak.autogen config.mak.append
$(RM) -r autom4te.cache
diff -Paur --no-dereference -- git.upstream/progress.c git/progress.c
--- git.upstream/progress.c
+++ git/progress.c
@@ -39,6 +39,10 @@
uint64_t start_ns;
};
+/* PATCH: Sortix does not have obsolescent XSI itimers. */
+#if defined(__sortix__)
+static timer_t progress_timer;
+#endif
static volatile sig_atomic_t progress_update;
static void progress_interval(int signum)
@@ -48,8 +52,19 @@
static void set_progress_signal(void)
{
+#if defined(__sortix__) && !defined(__SORTIX_HAS_RESTARTABLE_SYSCALLS__)
+ /* TODO: Sortix doesn't have restartable system calls at the moment and this
+ feature creates spurious failures, so this feature is disabled for
+ now. */
+ return;
+#endif
+
struct sigaction sa;
+#if defined(__sortix__)
+ struct itimerspec v;
+#else
struct itimerval v;
+#endif
progress_update = 0;
@@ -59,16 +74,39 @@
sa.sa_flags = SA_RESTART;
sigaction(SIGALRM, &sa, NULL);
+#if defined(__sortix__)
+ struct sigevent sev;
+ memset(&sev, 0, sizeof(sev));
+ sev.sigev_notify = SIGEV_SIGNAL;
+ sev.sigev_signo = SIGALRM;
+ timer_create(CLOCK_MONOTONIC, &sev, &progress_timer);
+ v.it_interval.tv_sec = 1;
+ v.it_interval.tv_nsec = 0;
+ v.it_value = v.it_interval;
+ timer_settime(progress_timer, 0, &v, NULL);
+#else
v.it_interval.tv_sec = 1;
v.it_interval.tv_usec = 0;
v.it_value = v.it_interval;
setitimer(ITIMER_REAL, &v, NULL);
+#endif
}
static void clear_progress_signal(void)
{
+#if defined(__sortix__) && !defined(__SORTIX_HAS_RESTARTABLE_SYSCALLS__)
+ /* TODO: Sortix doesn't have restartable system calls at the moment and this
+ feature creates spurious failures, so this feature is disabled for
+ now. */
+ return;
+#endif
+
+#if defined(__sortix__)
+ timer_delete(progress_timer);
+#else
struct itimerval v = {{0,},};
setitimer(ITIMER_REAL, &v, NULL);
+#endif
signal(SIGALRM, SIG_IGN);
progress_update = 0;
}
diff -Paur --no-dereference -- git.upstream/run-command.c git/run-command.c
--- git.upstream/run-command.c
+++ git/run-command.c
@@ -491,9 +491,12 @@
#else
bug_die(pthread_sigmask(SIG_SETMASK, &all, &as->old),
"blocking all signals");
+/* PATCH: Sortix doesn't have pthread cancelation. */
+#ifdef PTHREAD_CANCEL_DISABLE
bug_die(pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &as->cs),
"disabling cancellation");
#endif
+#endif
}
static void atfork_parent(struct atfork_state *as)
@@ -502,8 +505,11 @@
if (sigprocmask(SIG_SETMASK, &as->old, NULL))
die_errno("sigprocmask");
#else
+/* PATCH: Sortix doesn't have pthread cancelation. */
+#ifdef PTHREAD_CANCEL_DISABLE
bug_die(pthread_setcancelstate(as->cs, NULL),
"re-enabling cancellation");
+#endif
bug_die(pthread_sigmask(SIG_SETMASK, &as->old, NULL),
"restoring signal mask");
#endif