source: trunk/essentials/dev-lang/perl/os2/Makefile.SHs

Last change on this file was 3220, checked in by bird, 18 years ago

Build a.out and link omf. Drop -Zexe.

  • Property svn:eol-style set to native
File size: 6.0 KB
Line 
1# This file is read by Makefile.SH to produce rules for $(LIBPERL) (and
2# some additional rules as well).
3
4# Rerun `sh Makefile.SH; make depend' after making any change.
5
6# Additional rules supported: perl_
7
8perl_fullversion="5.00${PERL_VERSION}_$PERL_SUBVERSION"
9case "$archname" in
10 *-thread*) perl_fullversion="${perl_fullversion}-threaded";;
11esac
12
13dll_post="`echo $perl_fullversion | sum | sed -e 's/^0*//' | awk '{print $1}'`"
14dll_post="`printf '%x' $dll_post | tr '[a-z]' '[A-Z]'`"
15if test -z "dll_post"; then
16 echo "error: dll_post is emtpy.";
17 exit 1;
18fi
19
20$spitshell >>Makefile <<!GROK!THIS!
21
22PERL_FULLVERSION = $perl_fullversion
23
24# No -DPERL_CORE
25SO_CCCMD = \$(CC) $ccflags \$(OPTIMIZE)
26
27LD_OPT =
28PERL_DLL_LD_OPT = -Zdll -Zomf -Zhigh-mem -Zmap
29
30PERL_DLL_BASE = perl$dll_post
31PERL_DLL = \$(PERL_DLL_BASE)\$(DLSUFFIX)
32TEST_PERL_DLL = perl_dll_t
33CONFIG_ARGS = $config_args
34
35!GROK!THIS!
36
37$spitshell >>Makefile <<'!NO!SUBS!'
38PREPLIBRARY_LIBPERL = $(LIBPERL)
39$(LIBPERL) perl.lib: perl.imp perl5.def libperl_override.a
40 emximp -o $@ perl.imp
41 cp $@ perl.lib
42
43imp_version: #$(FIRSTMAKEFILE) -crap
44 echo $(PERL_DLL_BASE) > $@
45
46libperl_override.imp: os2/os2add.sym miniperl$(EXE_EXT) imp_version
47 ./miniperl$(EXE_EXT) -wnle 'print "$$_\t$(PERL_DLL_BASE)\t$$_\t?"' os2/os2add.sym > $@
48 echo 'strdup $(PERL_DLL_BASE) Perl_strdup ?' >> $@
49 echo 'putenv $(PERL_DLL_BASE) Perl_putenv ?' >> $@
50
51libperl_override.a: libperl_override.imp
52 emximp -o $@ libperl_override.imp
53
54libperl_dllmain.imp: imp_version
55 echo '_main $(PERL_DLL_BASE) _dll_perlmain ?' > $@
56
57libperl_dllmain$(LIB_EXT): libperl_dllmain.imp
58 emximp -o $@ libperl_dllmain.imp
59
60perl.imp: perl5.def imp_version
61 emximp -o $@ perl5.def
62
63
64.PHONY: perl_dll installcmd perlrexx test_prep_perl_ test_prep_various all_harness \
65 all_test test_harness_redir
66
67perl_dll: $(PERL_DLL)
68
69perl_dll_t: t/$(PERL_DLL)
70
71t/$(PERL_DLL): $(PERL_DLL)
72 cp -f $(PERL_DLL) t/$(PERL_DLL)
73
74$(PERL_DLL): $(obj) perl5.def perl$(OBJ_EXT) perlmain$(OBJ_EXT) $(DYNALOADER)
75 $(LD) $(LD_OPT) $(LDDLFLAGS) $(PERL_DLL_LD_OPT) -o $@ perl$(OBJ_EXT) $(obj) perlmain$(OBJ_EXT) $(DYNALOADER) $(libs) perl5.def || ( rm $(PERL_DLL) && sh -c false )
76
77perl5.olddef: perl.linkexp
78 echo "LIBRARY '$(PERL_DLL_BASE)' INITINSTANCE TERMINSTANCE" > $@
79 echo DESCRIPTION "'Perl interpreter v$(PERL_FULLVERSION), export autogenerated'" >>$@
80 echo STACKSIZE 32768 >>$@
81 echo CODE LOADONCALL >>$@
82 echo DATA LOADONCALL NONSHARED MULTIPLE >>$@
83 echo EXPORTS >>$@
84!NO!SUBS!
85
86if [ ! -z "$myttyname" ] ; then
87 $spitshell >>Makefile <<'!NO!SUBS!'
88 echo ' "ttyname"' >>$@
89!NO!SUBS!
90fi
91
92$spitshell >>Makefile <<'!NO!SUBS!'
93 cat perl.linkexp >>$@
94
95# grep -v '"\(malloc\|realloc\|free\)"' perl.linkexp >>$@
96
97
98perl.exports: perl.exp EXTERN.h perl.h
99 (echo "#include \"EXTERN.h\" \n#include \"perl.h\" \n#include \"perl.exp\""; \
100 echo "malloc\nrealloc\ncalloc\nfree") | \
101 $(CC) -DEMBED -E - | \
102 awk '{if ($$2 == "") print $$1}' | sort | uniq > $@
103
104perl.linkexp: perl.exports perl.map os2/os2.sym
105 cat perl.exports os2/os2.sym perl.map | sort | uniq -d | sed -e 's/\w\+/ "\0"/' > perl.linkexp
106
107# We link miniperl statically, since .DLL depends on $(DYNALOADER)
108
109miniperl.map: miniperl$(EXE_EXT)
110
111miniperl$(EXE_EXT): $(obj) perl$(OBJ_EXT) miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT)
112 $(CC) $(CLDFLAGS) -o $@ miniperlmain$(OBJ_EXT) perl$(OBJ_EXT) `echo $(obj)|sed -e 's/\bop\./opmini./g'` $(libs) -Zmap -Zargs-wild
113 @./miniperl$(EXE_EXT) -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
114
115depend: os2ish.h os2thread.h
116
117# Deal with os2/* stuff
118os2$(OBJ_EXT): os2.c os2ish.h os2thread.h
119os2.c:
120 ln -s os2/$@ $@
121dl_os2.c: os2/dl_os2.c
122 ln -s os2/$@ $@
123perlrexx$(OBJ_EXT): perlrexx.c os2ish.h os2thread.h
124perlrexx.c:
125 ln -s os2/$@ $@
126
127os2ish.h: os2/os2ish.h
128 ln -s os2/$@ $@
129
130os2thread.h: os2/os2thread.h
131 ln -s os2/$@ $@
132
133installcmd :
134 @perl -e 'die qq{Give the option INSTALLCMDDIR=... to make!} if $$ARGV[0] eq ""' $(INSTALLCMDDIR)
135 ./miniperl$(EXE_EXT) -Ilib os2/perl2cmd.pl $(INSTALLCMDDIR)
136
137_preplibrary = miniperl$(EXE_EXT) lib/Config.pm lib/lib.pm lib/re.pm
138
139PERLREXX_DLL = perlrexx.dll
140
141# Dynamically loaded PM-application perl:
142perl__$(EXE_EXT): $& $(PERL_DLL) libperl_dllmain$(LIB_EXT)
143 $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o $@ libperl_dllmain$(LIB_EXT) -Zlinker /PM:PM
144
145# Forking dynamically loaded perl:
146perl$(EXE_EXT): $& $(PERLREXX_DLL) $(PERL_DLL) libperl_dllmain$(LIB_EXT)
147 $(CC) $(CLDFLAGS_DLL) $(CCDLFLAGS) -o $@ libperl_dllmain$(LIB_EXT)
148
149clean: os2_clean
150
151os2_clean:
152 rm -f *.map perlrexx.dll perl___[0-9]*
153
154perlrexx: $(PERLREXX_DLL)
155 @sh -c true
156
157# Remove -Zexe, add -Zdll -Zso. No stack needed
158SO_CLDFLAGS = -Zdll -Zomf
159
160# A callable-from-REXX DLL
161
162$(PERLREXX_DLL): perlrexx$(OBJ_EXT) perlrexx.def $(DYNALOADER) ext.libs
163 $(SHRPENV) $(CC) $(SO_CLDFLAGS) $(CCDLFLAGS) -o $@ perlrexx$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LIBPERL) `cat ext.libs` $(libs) perlrexx.def
164
165perlrexx.def: miniperl$(EXE_EXT) $(_preplibrary)
166 echo "LIBRARY 'perlrexx' INITINSTANCE TERMINSTANCE" > $@
167 echo "DESCRIPTION '@#perl5-porters@perl.org:`miniperl$(EXE_EXT) -Ilib -MConfig -e 'print \$$]'`#@ REXX to Perl `miniperl$(EXE_EXT) -Ilib -MConfig -e 'print \$$Config{version}'` interface'" >> $@
168 echo "EXPORTS" >> $@
169 echo ' "_PERL"' >> $@
170 echo ' "_PERLTERM"' >> $@
171 echo ' "_PERLINIT"' >> $@
172 echo ' "_PERLEXIT"' >> $@
173 echo ' "_PERLEVAL"' >> $@
174 echo ' "_PERLLASTERROR"' >> $@
175 echo ' "_PERLEVALSUBCOMMAND"' >> $@
176 echo ' "_PERLEXPORTALL"' >> $@
177 echo ' "_PERLDROPALL"' >> $@
178 echo ' "_PERLDROPALLEXIT"' >> $@
179
180
181perlrexx$(OBJ_EXT): perlrexx.c
182 $(SO_CCCMD) $(PLDLFLAGS) -c perlrexx.c
183
184
185# To test with harness, one needed to HARNESS_IGNORE_EXITCODE=2
186
187# Define to be empty to get a TTY test
188REDIR_TEST = 2>&1 | tee 00_$@
189
190test_prep_perl_: test_prep_pre miniperl_$(EXE_EXT) ./perl_$(EXE_EXT)
191 PERL=./perl_ $(MAKE) _test_prep
192
193test_prep_various: test_prep_pre miniperl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
194
195all_test: test
196
197test_harness_redir: test_prep
198 -PERL=./perl $(MAKE) TESTFILE=harness _test $(REDIR_TEST)
199
200all_harness: test_harness_redir
201
202!NO!SUBS!
203
Note: See TracBrowser for help on using the repository browser.