Skip to content

Commit 7505e85

Browse files
committed
Support Plan 9 dialect
Plan 9 ANSI/POSIX environment is: * No expr(1) * sed(1) limits max length of label to 7 characters * pcc ignores object files that has incorrect extension, so should use underlying loader directly. * No ln(1). Instead use bind(1), but bind isn't persisted to the disk. However it isn't efficient to copy git to git subcommands such as git-add. Therefore Plan 9 needs exec-wrapper to switch behavior by executable name. * tar(1) don't have -o option Signed-off-by: lufia <[email protected]>
1 parent 7abbd36 commit 7505e85

File tree

7 files changed

+208
-52
lines changed

7 files changed

+208
-52
lines changed

GIT-VERSION-GEN

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ else
2626
VN="$DEF_VER"
2727
fi
2828

29-
VN=$(expr "$VN" : v*'\(.*\)')
29+
VN=${VN#v}
3030

3131
if test -r $GVF
3232
then

Makefile

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,7 @@ export prefix bindir sharedir sysconfdir gitwebdir perllibdir localedir
570570

571571
# Set our default programs
572572
CC = cc
573+
LD = cc
573574
AR = ar
574575
RM = rm -f
575576
DIFF = diff
@@ -800,6 +801,10 @@ ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
800801
# what 'all' will build but not install in gitexecdir
801802
OTHER_PROGRAMS = git$X
802803

804+
# what 'all' will build but not install in neither bindir and gitexecdir,
805+
COMPAT_PROGRAM_OBJS =
806+
COMPAT_PROGRAMS =
807+
803808
# what test wrappers are needed and 'install' will install, in bindir
804809
BINDIR_PROGRAMS_NEED_X += git
805810
BINDIR_PROGRAMS_NEED_X += git-upload-pack
@@ -1863,6 +1868,11 @@ ifndef PAGER_ENV
18631868
PAGER_ENV = LESS=FRX LV=-c
18641869
endif
18651870

1871+
ifdef USE_EXEC_WRAPPER
1872+
COMPAT_PROGRAM_OBJS += exec-wrapper.o
1873+
COMPAT_PROGRAMS += exec-wrapper$X
1874+
endif
1875+
18661876
QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir
18671877
QUIET_SUBDIR1 =
18681878

@@ -2062,7 +2072,7 @@ profile-fast: profile-clean
20622072
$(MAKE) PROFILE=USE all
20632073

20642074

2065-
all:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
2075+
all:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) $(COMPAT_PROGRAMS) GIT-BUILD-OPTIONS
20662076
ifneq (,$X)
20672077
$(QUIET_BUILT_IN)$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), test -d '$p' -o '$p' -ef '$p$X' || $(RM) '$p';)
20682078
endif
@@ -2122,7 +2132,7 @@ git.sp git.s git.o: EXTRA_CPPFLAGS = \
21222132
'-DGIT_INFO_PATH="$(infodir_relative_SQ)"'
21232133

21242134
git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)
2125-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) \
2135+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) \
21262136
$(filter %.o,$^) $(LIBS)
21272137

21282138
help.sp help.s help.o: command-list.h
@@ -2141,10 +2151,11 @@ version.sp version.s version.o: EXTRA_CPPFLAGS = \
21412151
GIT_CEILING_DIRECTORIES="$(CURDIR)/.." \
21422152
git rev-parse -q --verify HEAD 2>/dev/null)"'
21432153

2144-
$(BUILT_INS): git$X
2154+
$(BUILT_INS): git$X $(COMPAT_PROGRAMS)
21452155
$(QUIET_BUILT_IN)$(RM) $@ && \
21462156
ln $< $@ 2>/dev/null || \
21472157
ln -s $< $@ 2>/dev/null || \
2158+
cp exec-wrapper$X $@ 2>/dev/null || \
21482159
cp $< $@
21492160

21502161
command-list.h: generate-cmdlist.sh command-list.txt
@@ -2344,6 +2355,7 @@ VCSSVN_OBJS += vcs-svn/svndump.o
23442355

23452356
TEST_OBJS := $(patsubst %$X,%.o,$(TEST_PROGRAMS)) $(patsubst %,t/helper/%,$(TEST_BUILTINS_OBJS))
23462357
OBJECTS := $(LIB_OBJS) $(BUILTIN_OBJS) $(PROGRAM_OBJS) $(TEST_OBJS) \
2358+
$(COMPAT_PROGRAM_OBJS) \
23472359
$(XDIFF_OBJS) \
23482360
$(VCSSVN_OBJS) \
23492361
$(FUZZ_OBJS) \
@@ -2464,22 +2476,29 @@ compat/nedmalloc/nedmalloc.sp compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \
24642476
compat/nedmalloc/nedmalloc.sp: SP_EXTRA_FLAGS += -Wno-non-pointer-null
24652477
endif
24662478

2479+
exec-wrapper.sp exec-wrapper.s exec-wrapper.o: EXTRA_CPPFLAGS = \
2480+
'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
2481+
'-DBINDIR="$(bindir_relative_SQ)"'
2482+
2483+
exec-wrapper$X: exec-wrapper.o GIT-LDFLAGS
2484+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^)
2485+
24672486
git-%$X: %.o GIT-LDFLAGS $(GITLIBS)
2468-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
2487+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
24692488

24702489
git-imap-send$X: imap-send.o $(IMAP_SEND_BUILDDEPS) GIT-LDFLAGS $(GITLIBS)
2471-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2490+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
24722491
$(IMAP_SEND_LDFLAGS) $(LIBS)
24732492

24742493
git-http-fetch$X: http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
2475-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2494+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
24762495
$(CURL_LIBCURL) $(LIBS)
24772496
git-http-push$X: http.o http-push.o GIT-LDFLAGS $(GITLIBS)
2478-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2497+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
24792498
$(CURL_LIBCURL) $(EXPAT_LIBEXPAT) $(LIBS)
24802499

24812500
git-remote-testsvn$X: remote-testsvn.o GIT-LDFLAGS $(GITLIBS) $(VCSSVN_LIB)
2482-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS) \
2501+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS) \
24832502
$(VCSSVN_LIB)
24842503

24852504
$(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
@@ -2489,7 +2508,7 @@ $(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
24892508
cp $< $@
24902509

24912510
$(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o GIT-LDFLAGS $(GITLIBS)
2492-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2511+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
24932512
$(CURL_LIBCURL) $(EXPAT_LIBEXPAT) $(LIBS)
24942513

24952514
$(LIB_FILE): $(LIB_OBJS)
@@ -2783,7 +2802,7 @@ t/helper/test-svn-fe$X: $(VCSSVN_LIB)
27832802
t/helper/test-tool$X: $(patsubst %,t/helper/%,$(TEST_BUILTINS_OBJS))
27842803

27852804
t/helper/test-%$X: t/helper/test-%.o GIT-LDFLAGS $(GITLIBS)
2786-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(filter %.a,$^) $(LIBS)
2805+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(filter %.a,$^) $(LIBS)
27872806

27882807
check-sha1:: t/helper/test-tool$X
27892808
t/helper/test-sha1.sh
@@ -2966,6 +2985,7 @@ endif
29662985
{ test -z "$(NO_INSTALL_HARDLINKS)" && \
29672986
ln "$$bindir/git$X" "$$bindir/$$p" 2>/dev/null || \
29682987
ln -s "git$X" "$$bindir/$$p" 2>/dev/null || \
2988+
cp "exec-wrapper$X" "$$execdir/$$p" 2>/dev/null || \
29692989
cp "$$bindir/git$X" "$$bindir/$$p" || exit; } \
29702990
done && \
29712991
for p in $(BUILT_INS); do \
@@ -2975,6 +2995,7 @@ endif
29752995
{ test -z "$(NO_INSTALL_HARDLINKS)" && \
29762996
ln "$$execdir/git$X" "$$execdir/$$p" 2>/dev/null || \
29772997
ln -s "git$X" "$$execdir/$$p" 2>/dev/null || \
2998+
cp "exec-wrapper$X" "$$execdir/$$p" 2>/dev/null || \
29782999
cp "$$execdir/git$X" "$$execdir/$$p" || exit; } \
29793000
done && \
29803001
remote_curl_aliases="$(REMOTE_CURL_ALIASES)" && \

config.mak.uname

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ ifeq ($(uname_S),Windows)
427427

428428
CC = compat/vcbuild/scripts/clink.pl
429429
AR = compat/vcbuild/scripts/lib.pl
430+
LD = $(CC)
430431
CFLAGS =
431432
BASIC_CFLAGS = -nologo -I. -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
432433
COMPAT_OBJS = compat/msvc.o compat/winansi.o \
@@ -510,6 +511,7 @@ ifeq ($(uname_S),NONSTOP_KERNEL)
510511
# INLINE='' would just replace one set of warnings with another and
511512
# still not compile in c89 mode, due to non-const array initializations.
512513
CC = cc -c99
514+
LD = $(CC)
513515
# Build down-rev compatible objects that don't use our new getopt_long.
514516
ifeq ($(uname_R).$(uname_V),J06.21)
515517
CC += -WRVU=J06.20
@@ -657,8 +659,10 @@ else
657659
BASIC_LDFLAGS += -Wl,--large-address-aware
658660
endif
659661
CC = gcc
662+
LD = $(CC)
660663
COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0 -DDETECT_MSYS_TTY \
661664
-fstack-protector-strong
665+
BASIC_LDFLAGS += -fstack-protector-strong
662666
EXTLIBS += -lntdll
663667
INSTALL = /bin/install
664668
NO_R_TO_GCC_LINKER = YesPlease
@@ -691,6 +695,101 @@ ifeq ($(uname_S),QNX)
691695
NO_STRCASESTR = YesPlease
692696
NO_STRLCPY = YesPlease
693697
endif
698+
ifeq ($(uname_S),Plan9)
699+
CC = pcc
700+
CFLAGS = -FVB+
701+
ARFLAGS = uv
702+
# pcc don't use mismatched objfiles
703+
ifeq ($(objtype),386)
704+
LD = 8l
705+
endif
706+
ifeq ($(objtype),amd64)
707+
LD = 6l
708+
endif
709+
ifeq ($(objtype),arm)
710+
LD = 5l
711+
endif
712+
ifeq ($(objtype),mips)
713+
LD = vl
714+
endif
715+
ifeq ($(objtype),mips64)
716+
LD = 4l
717+
endif
718+
ifeq ($(objtype),power)
719+
LD = ql
720+
endif
721+
ifeq ($(objtype),sparc)
722+
LD = kl
723+
endif
724+
ifeq ($(objtype),spim)
725+
LD = 0l
726+
endif
727+
ifeq ($(objtype),spim64)
728+
LD = xl
729+
endif
730+
BASIC_CFLAGS += -Icompat/plan9
731+
BASIC_CFLAGS += -D__PLAN9__
732+
BASIC_CFLAGS += -D_POSIX_SOURCE
733+
BASIC_CFLAGS += -D_BSD_EXTENSION
734+
BASIC_CFLAGS += -D_SUSV2_SOURCE
735+
BASIC_CFLAGS += -D_PLAN9_SOURCE
736+
BASIC_CFLAGS += -D_RESEARCH_SOURCE
737+
BASIC_CFLAGS += -D_REENTRANT_SOURCE
738+
BASIC_CFLAGS += -DHAVE_SOCK_OPTS
739+
BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in6
740+
BASIC_CFLAGS += -DHOME_ENVIRONMENT=\"home\"
741+
BASIC_CFLAGS += -DPATH_ENVIRONMENT=\"path\"
742+
BASIC_CFLAGS += -D_PATH_SEP=1
743+
BASIC_CFLAGS += -D_PATH_DEFPATH=\"/bin\\x01.\\x01/bin/ape\"
744+
COMPAT_CFLAGS += -DHAVE_STDINT_H
745+
COMPAT_CFLAGS += -DHAVE_LOCALE_H
746+
LDFLAGS = -L/$(objtype)/lib/ape
747+
748+
NEEDS_CRYPTO_WITH_SSL = YesPlease
749+
NEEDS_SYS_PARAM_H = YesPlease
750+
NO_NSEC = YesPlease
751+
NO_SYMLINK_HEAD = YesPlease
752+
NO_GECOS_IN_PWENT = YesPlease
753+
NO_GETTEXT = YesPlease
754+
NO_SETENV = YesPlease
755+
NO_STRCASESTR = YesPlease
756+
NO_STRLCPY = YesPlease
757+
NO_STRTOUMAX = YesPlease
758+
NO_REGEX = YesPlease
759+
NO_MKDTEMP = YesPlease
760+
NO_UNSETENV = YesPlease
761+
NO_INITGROUPS = YesPlease
762+
NO_MMAP = YesPlease
763+
NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
764+
NO_STRUCT_ITIMERVAL = YesPlease
765+
NO_SETITIMER = YesPlease
766+
NO_ICONV = YesPlease
767+
NO_SYMLINK_HEAD = YesPlease
768+
OPENSSL_SHA1 = YesPlease
769+
OPENSSL_SHA256 = YesPlease
770+
NO_MEMMEM = YesPlease
771+
HAVE_CLOCK_GETTIME = YesPlease
772+
773+
NO_SVN_TESTS = YesPlease
774+
NO_PERL = YesPlease
775+
NO_PYTHON = YesPlease
776+
NO_TCLTK = YesPlease
777+
NO_INSTALL_HARDLINKS = YesPlease
778+
779+
ETC_GITCONFIG = /sys/lib/git/config
780+
ETC_GITATTRIBUTES = /sys/lib/git/attributes
781+
USER_GITCONFIG = ~/lib/git/config
782+
USER_GITCREDENTIALS = ~/lib/git/credentials
783+
USER_GITCREDENTIAL_CACHE = ~/lib/git/credential-cache
784+
785+
DEFAULT_PAGER = /bin/p
786+
PAGER_ENV = terminal=
787+
SHELL_PATH = /bin/ape/sh
788+
DEFAULT_EDITOR = /bin/ed
789+
790+
CURL_LDFLAGS = -lcurl -lssl -lcrypto
791+
USE_EXEC_WRAPPER = YesPlease
792+
endif
694793

695794
vcxproj:
696795
# Require clean work tree

exec-wrapper.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#include <stdio.h>
2+
#include <errno.h>
3+
#include <string.h>
4+
#include <unistd.h>
5+
6+
int main(int argc, char **argv)
7+
{
8+
/* we should detect git-core path */
9+
10+
USED(argc);
11+
if (execv("/bin/git", argv) < 0) {
12+
fprintf(stderr, "%s: %s\n", argv[0], strerror(errno));
13+
return 1;
14+
}
15+
return 0; /* can't happen */
16+
}

generate-cmdlist.sh

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
#!/bin/sh
22

3+
if ! echo abc | sed 's/(ab)c/\1/' >/dev/null 2>&1
4+
then
5+
alias sed='sed -E'
6+
fi
7+
38
die () {
49
echo "$@" >&2
510
exit 1
@@ -10,24 +15,24 @@ command_list () {
1015
}
1116

1217
get_categories () {
13-
tr ' ' '\n'|
18+
tr ' ' '\012'|
1419
grep -v '^$' |
1520
sort |
1621
uniq
1722
}
1823

1924
category_list () {
2025
command_list "$1" |
21-
cut -c 40- |
26+
awk '{ print substr($0, 40) }' |
2227
get_categories
2328
}
2429

2530
get_synopsis () {
2631
sed -n '
27-
/^NAME/,/'"$1"'/H
32+
/^NAME/,/'"$1"'/h
2833
${
2934
x
30-
s/.*'"$1"' - \(.*\)/N_("\1")/
35+
s/.*'"$1"' - (.*)/N_("\1")/
3136
p
3237
}' "Documentation/$1.txt"
3338
}
@@ -60,16 +65,23 @@ define_category_names () {
6065
echo "};"
6166
}
6267

68+
if test -z "$(echo -n)"
69+
then
70+
alias print='echo -n'
71+
else
72+
alias print='printf %s'
73+
fi
74+
6375
print_command_list () {
6476
echo "static struct cmdname_help command_list[] = {"
6577

6678
command_list "$1" |
6779
while read cmd rest
6880
do
69-
printf " { \"$cmd\", $(get_synopsis $cmd), 0"
81+
print " { \"$cmd\", $(get_synopsis $cmd), 0"
7082
for cat in $(echo "$rest" | get_categories)
7183
do
72-
printf " | CAT_$cat"
84+
print " | CAT_$cat"
7385
done
7486
echo " },"
7587
done

0 commit comments

Comments
 (0)