Skip to content

Commit 8d54009

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 8aadd64 commit 8d54009

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
@@ -556,6 +556,7 @@ export prefix bindir sharedir sysconfdir gitwebdir perllibdir localedir
556556

557557
# Set our default programs
558558
CC = cc
559+
LD = cc
559560
AR = ar
560561
RM = rm -f
561562
DIFF = diff
@@ -792,6 +793,10 @@ ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
792793
# what 'all' will build but not install in gitexecdir
793794
OTHER_PROGRAMS = git$X
794795

796+
# what 'all' will build but not install in neither bindir and gitexecdir,
797+
COMPAT_PROGRAM_OBJS =
798+
COMPAT_PROGRAMS =
799+
795800
# what test wrappers are needed and 'install' will install, in bindir
796801
BINDIR_PROGRAMS_NEED_X += git
797802
BINDIR_PROGRAMS_NEED_X += git-receive-pack
@@ -1882,6 +1887,11 @@ ifndef PAGER_ENV
18821887
PAGER_ENV = LESS=FRX LV=-c
18831888
endif
18841889

1890+
ifdef USE_EXEC_WRAPPER
1891+
COMPAT_PROGRAM_OBJS += exec-wrapper.o
1892+
COMPAT_PROGRAMS += exec-wrapper$X
1893+
endif
1894+
18851895
QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir
18861896
QUIET_SUBDIR1 =
18871897

@@ -2082,7 +2092,7 @@ profile-fast: profile-clean
20822092
$(MAKE) PROFILE=USE all
20832093

20842094

2085-
all:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
2095+
all:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) $(COMPAT_PROGRAMS) GIT-BUILD-OPTIONS
20862096
ifneq (,$X)
20872097
$(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';)
20882098
endif
@@ -2142,7 +2152,7 @@ git.sp git.s git.o: EXTRA_CPPFLAGS = \
21422152
'-DGIT_INFO_PATH="$(infodir_relative_SQ)"'
21432153

21442154
git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)
2145-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) \
2155+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) \
21462156
$(filter %.o,$^) $(LIBS)
21472157

21482158
help.sp help.s help.o: command-list.h
@@ -2161,10 +2171,11 @@ version.sp version.s version.o: EXTRA_CPPFLAGS = \
21612171
GIT_CEILING_DIRECTORIES="$(CURDIR)/.." \
21622172
git rev-parse -q --verify HEAD 2>/dev/null)"'
21632173

2164-
$(BUILT_INS): git$X
2174+
$(BUILT_INS): git$X $(COMPAT_PROGRAMS)
21652175
$(QUIET_BUILT_IN)$(RM) $@ && \
21662176
ln $< $@ 2>/dev/null || \
21672177
ln -s $< $@ 2>/dev/null || \
2178+
cp exec-wrapper$X $@ 2>/dev/null || \
21682179
cp $< $@
21692180

21702181
config-list.h: generate-configlist.sh
@@ -2370,6 +2381,7 @@ VCSSVN_OBJS += vcs-svn/svndump.o
23702381

23712382
TEST_OBJS := $(patsubst %$X,%.o,$(TEST_PROGRAMS)) $(patsubst %,t/helper/%,$(TEST_BUILTINS_OBJS))
23722383
OBJECTS := $(LIB_OBJS) $(BUILTIN_OBJS) $(PROGRAM_OBJS) $(TEST_OBJS) \
2384+
$(COMPAT_PROGRAM_OBJS) \
23732385
$(XDIFF_OBJS) \
23742386
$(VCSSVN_OBJS) \
23752387
$(FUZZ_OBJS) \
@@ -2490,26 +2502,33 @@ compat/nedmalloc/nedmalloc.sp compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \
24902502
compat/nedmalloc/nedmalloc.sp: SP_EXTRA_FLAGS += -Wno-non-pointer-null
24912503
endif
24922504

2505+
exec-wrapper.sp exec-wrapper.s exec-wrapper.o: EXTRA_CPPFLAGS = \
2506+
'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
2507+
'-DBINDIR="$(bindir_relative_SQ)"'
2508+
2509+
exec-wrapper$X: exec-wrapper.o GIT-LDFLAGS
2510+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^)
2511+
24932512
git-%$X: %.o GIT-LDFLAGS $(GITLIBS)
2494-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
2513+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
24952514

24962515
git-bugreport$X: bugreport.o GIT-LDFLAGS $(GITLIBS)
24972516
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
24982517
$(LIBS)
24992518

25002519
git-imap-send$X: imap-send.o $(IMAP_SEND_BUILDDEPS) GIT-LDFLAGS $(GITLIBS)
2501-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2520+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
25022521
$(IMAP_SEND_LDFLAGS) $(LIBS)
25032522

25042523
git-http-fetch$X: http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
2505-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2524+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
25062525
$(CURL_LIBCURL) $(LIBS)
25072526
git-http-push$X: http.o http-push.o GIT-LDFLAGS $(GITLIBS)
2508-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2527+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
25092528
$(CURL_LIBCURL) $(EXPAT_LIBEXPAT) $(LIBS)
25102529

25112530
git-remote-testsvn$X: remote-testsvn.o GIT-LDFLAGS $(GITLIBS) $(VCSSVN_LIB)
2512-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS) \
2531+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS) \
25132532
$(VCSSVN_LIB)
25142533

25152534
$(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
@@ -2519,7 +2538,7 @@ $(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
25192538
cp $< $@
25202539

25212540
$(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o GIT-LDFLAGS $(GITLIBS)
2522-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2541+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
25232542
$(CURL_LIBCURL) $(EXPAT_LIBEXPAT) $(LIBS)
25242543

25252544
$(LIB_FILE): $(LIB_OBJS)
@@ -2814,7 +2833,7 @@ t/helper/test-svn-fe$X: $(VCSSVN_LIB)
28142833
t/helper/test-tool$X: $(patsubst %,t/helper/%,$(TEST_BUILTINS_OBJS))
28152834

28162835
t/helper/test-%$X: t/helper/test-%.o GIT-LDFLAGS $(GITLIBS)
2817-
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(filter %.a,$^) $(LIBS)
2836+
$(QUIET_LINK)$(LD) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(filter %.a,$^) $(LIBS)
28182837

28192838
check-sha1:: t/helper/test-tool$X
28202839
t/helper/test-sha1.sh
@@ -2997,6 +3016,7 @@ endif
29973016
{ test -z "$(NO_INSTALL_HARDLINKS)" && \
29983017
ln "$$bindir/git$X" "$$bindir/$$p" 2>/dev/null || \
29993018
ln -s "git$X" "$$bindir/$$p" 2>/dev/null || \
3019+
cp "exec-wrapper$X" "$$execdir/$$p" 2>/dev/null || \
30003020
cp "$$bindir/git$X" "$$bindir/$$p" || exit; } \
30013021
done && \
30023022
for p in $(BUILT_INS); do \
@@ -3006,6 +3026,7 @@ endif
30063026
{ test -z "$(NO_INSTALL_HARDLINKS)" && \
30073027
ln "$$execdir/git$X" "$$execdir/$$p" 2>/dev/null || \
30083028
ln -s "git$X" "$$execdir/$$p" 2>/dev/null || \
3029+
cp "exec-wrapper$X" "$$execdir/$$p" 2>/dev/null || \
30093030
cp "$$execdir/git$X" "$$execdir/$$p" || exit; } \
30103031
done && \
30113032
remote_curl_aliases="$(REMOTE_CURL_ALIASES)" && \

config.mak.uname

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

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

703802
vcxproj:
704803
# 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)