VirtualBox

source: kBuild/trunk/src/kash/Makefile.kmk@ 3457

Last change on this file since 3457 was 3457, checked in by bird, 5 years ago

kash: New parser allocator for non-forked-mode.

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id
File size: 6.1 KB
Line 
1# $Id: Makefile.kmk 3457 2020-09-14 17:34:28Z bird $
2## @file
3# Sub-makefile for kash.
4#
5
6#
7# Copyright (c) 2005-2020 knut st. osmundsen <[email protected]>
8#
9# This file is part of kBuild.
10#
11# kBuild is free software; you can redistribute it and/or modify
12# it under the terms of the GNU General Public License as published by
13# the Free Software Foundation; either version 3 of the License, or
14# (at your option) any later version.
15#
16# kBuild is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19# GNU General Public License for more details.
20#
21# You should have received a copy of the GNU General Public License
22# along with kBuild. If not, see <http://www.gnu.org/licenses/>
23#
24#
25
26SUB_DEPTH = ../..
27include $(KBUILD_PATH)/subheader.kmk
28
29KASH_WIN_FORKED_MODE = 1
30
31#
32# The program.
33#
34PROGRAMS += kash
35kash_TEMPLATE = BIN-THREADED
36kash_NAME = kmk_ash
37kash_ASTOOL = YASM
38kash_DEFS = lint SHELL SMALL #KASH_SEPARATE_PARSER_ALLOCATOR
39if "$(KBUILD_TARGET)" != "win" || defined(KASH_WIN_FORKED_MODE)
40kash_DEFS += SH_FORKED_MODE
41endif
42kash_DEFS.debug = DEBUG=2
43kash_DEFS.haiku = BSD
44kash_DEFS.linux = BSD
45kash_DEFS.solaris = BSD
46## @todo bring over PC_SLASHES?
47kash_DEFS.win = \
48 BSD YY_NO_UNISTD_H \
49 SH_DEAL_WITH_CRLF PC_PATH_SEP PC_DRIVE_LETTERS PC_EXE_EXTS EXEC_HASH_BANG_SCRIPT \
50 KASH_USE_FORKSHELL2
51kash_DEFS.os2 = \
52 HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME PC_OS2_LIBPATHS \
53 SH_DEAL_WITH_CRLF PC_PATH_SEP PC_DRIVE_LETTERS PC_EXE_EXTS EXEC_HASH_BANG_SCRIPT
54kash_DEFS.darwin = \
55 HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME
56kash_DEFS.dragonfly = \
57 HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME
58kash_DEFS.freebsd = \
59 HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME
60kash_DEFS.gnukfbsd = HAVE_SYSCTL_H
61kash_DEFS.netbsd = \
62 HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME
63kash_DEFS.openbsd = \
64 HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME
65kash_INCS = $(kash_0_OUTDIR) . # (the last is because of error.h)
66kash_ASFLAGS.win = -g cv8
67kash_ASFLAGS.win.x86 = -f win32
68kash_ASFLAGS.win.amd64 = -f win64
69if "$(USER)" == "bird" && "$(KBUILD_TARGET)" != "win"
70kash_CFLAGS += -std=gnu99
71endif
72kash_CFLAGS.win.amd64 = -GS-
73ifdef KASH_WIN_FORKED_MODE
74kash_LDFLAGS.win = -DYNAMICBASE:NO
75endif
76kash_SOURCES = \
77 main.c \
78 alias.c \
79 cd.c \
80 error.c \
81 eval.c \
82 exec.c \
83 expand.c \
84 histedit.c \
85 input.c \
86 jobs.c \
87 mail.c \
88 memalloc.c \
89 mystring.c \
90 options.c \
91 output.c \
92 parser.c \
93 redir.c \
94 show.c \
95 syntax.c \
96 trap.c \
97 var.c \
98 miscbltin.c \
99 bltin/echo.c \
100 bltin/kill.c \
101 bltin/test.c \
102 \
103 $(kash_0_OUTDIR)/builtins.c \
104 $(kash_0_OUTDIR)/init.c \
105 $(kash_0_OUTDIR)/nodes.c \
106 \
107 setmode.c \
108 shinstance.c \
109 shheap.c \
110 shthread.c \
111 shfile.c
112kash_SOURCES.gnuhurd = \
113 $(kash_0_OUTDIR)/sys_signame.c \
114 strlcpy.c
115kash_SOURCES.gnukfbsd = \
116 $(kash_0_OUTDIR)/sys_signame.c \
117 strlcpy.c
118kash_SOURCES.gnuknbsd = \
119 $(kash_0_OUTDIR)/sys_signame.c \
120 strlcpy.c
121kash_SOURCES.haiku = \
122 $(kash_0_OUTDIR)/sys_signame.c \
123 strlcpy.c
124kash_SOURCES.linux = \
125 $(kash_0_OUTDIR)/sys_signame.c \
126 strlcpy.c
127kash_SOURCES.solaris = \
128 $(kash_0_OUTDIR)/sys_signame.c \
129 strlcpy.c
130kash_SOURCES.win = \
131 $(kash_0_OUTDIR)/sys_signame.c \
132 strsignal.c \
133 strlcpy.c \
134 ../lib/nt/nt_child_inject_standard_handles.c
135ifdef KASH_WIN_FORKED_MODE
136kash_SOURCES.win += \
137 shfork-win.c \
138 shforkA-win.asm
139endif
140
141kash_INTERMEDIATES = \
142 $(kash_0_OUTDIR)/builtins.h \
143 $(kash_0_OUTDIR)/nodes.h \
144 $(kash_0_OUTDIR)/token.h
145kash_CLEAN = \
146 $(kash_INTERMEDIATES) \
147 $(kash_0_OUTDIR)/builtins.c \
148 $(kash_0_OUTDIR)/init.c \
149 $(kash_0_OUTDIR)/nodes.c
150
151kash_main.c_DEFS = KBUILD_SVN_REV=$(KBUILD_SVN_REV)
152
153##
154## The manual page.
155##
156#INSTALLS += kash.man
157#kash.man_TEMPLATE = usr.bin.man
158#kash.man_SOURCES = sh.1=>kash.1
159
160
161#
162# The signal name list:
163#
164$$(kash_0_OUTDIR)/sys_signame.c: $$(bld_signames_1_TARGET) | $$(dir $$@)
165 $< $@
166
167BLDPROGS += bld_signames
168bld_signames_TEMPLATE := BLD
169bld_signames_DEFS := SHELL SMALL
170bld_signames_SOURCES := bld_signames.c
171
172
173if1of ($(KBUILD_TARGET), win os2)
174 KASH_USE_PREGENERATED_CODE = 1
175endif
176
177ifdef KASH_USE_PREGENERATED_CODE
178
179#
180# Use the pregenerated code.
181#
182kash_SOURCES += \
183 $(kash_0_OUTDIR)/arith.c \
184 $(kash_0_OUTDIR)/arith_lex.c
185kash_INTERMEDIATES += \
186 $(kash_0_OUTDIR)/arith.h
187
188define def_copy_generated
189$$$$(kash_0_OUTDIR)/$(src): $(PATH_SUB_CURRENT)/generated/$(src)
190 $$(RM) -f $$@
191 $$(CP) -f $$^ $$@
192endef
193
194$(foreach src, arith.h arith.c arith_lex.c builtins.h builtins.c nodes.h nodes.c token.h init.c,\
195$(eval $(def_copy_generated)))
196
197else # !KASH_USE_PREGENERATED_CODE
198
199#
200# Generate the code on the fly.
201#
202
203USES += lex yacc
204kash_USES = lex yacc
205kash_LEXTOOL = FLEX
206kash_LEXFLAGS = -8
207#kash_YACCTOOL = BISON
208kash_YACCTOOL = YACC
209kash_YACCFLAGS = -ld
210kash_SOURCES += \
211 arith.y \
212 arith_lex.l
213
214#
215# ATTENTION! ATTENTION! ATTENTION!
216#
217# Older ash versions has trouble with some of these scripts, great.
218# Kudos to the NetBSD guys for this clever move. ;)
219#
220# So, when building for the frist time, setting BOOSTRAP_SHELL=/bin/bash is good idea.
221#
222BOOTSTRAP_SHELL ?= $(SHELL)
223
224$$(kash_0_OUTDIR)/builtins.h + $$(kash_0_OUTDIR)/builtins.c: \
225 $$(kash_DEFPATH)/mkbuiltins \
226 $$(kash_DEFPATH)/shell.h \
227 $$(kash_DEFPATH)/builtins.def \
228 | $$(dir $$@)
229 $(BOOTSTRAP_SHELL) $+ $(dir $@)
230 [ -f $(kash_0_OUTDIR)/builtins.h ]
231
232$$(kash_0_OUTDIR)/nodes.h + $$(kash_0_OUTDIR)/nodes.c: \
233 $$(kash_DEFPATH)/mknodes.sh \
234 $$(kash_DEFPATH)/nodetypes \
235 $$(kash_DEFPATH)/nodes.c.pat \
236 | $$(dir $$@)
237 $(BOOTSTRAP_SHELL) $+ $(dir $@)
238 [ -f $(dir $@)/nodes.h ]
239
240$$(kash_0_OUTDIR)/token.h: $$(kash_DEFPATH)/mktokens | $$(dir $$@)
241 $(BOOTSTRAP_SHELL) $+
242 $(MV) token.h $@
243
244$$(kash_0_OUTDIR)/init.c: \
245 $$(kash_DEFPATH)/mkinit.sh \
246 $$(abspathex $$(filter-out $$(kash_0_OUTDIR)/%,$$(kash_SOURCES)), $$(kash_DEFPATH)) \
247 | $$(dir $$@)
248 $(BOOTSTRAP_SHELL) $+
249 $(MV) init.c $@
250
251endif # !KASH_USE_PREGENERATED_CODE
252
253#
254# For debugging file handle inheritance on Windows.
255#
256if "$(KBUILD_TARGET)" == win && 0
257PROGRAMS += tstDump
258tstDump_TEMPLATE = BIN
259tstDump_SOURCES = tstDump.c
260endif
261
262# Include the sub-makefile.
263include $(PATH_SUB_CURRENT)/tests/Makefile.kmk
264
265include $(FILE_KBUILD_SUB_FOOTER)
266
267
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette