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

Last change on this file since 3367 was 3220, checked in by bird, 19 years ago

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

  • Property svn:eol-style set to native
File size: 6.0 KB
RevLine 
[3181]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
[3220]6# Additional rules supported: perl_
[3181]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]'`"
[3220]15if test -z "dll_post"; then
16 echo "error: dll_post is emtpy.";
17 exit 1;
18fi
[3181]19
20$spitshell >>Makefile <<!GROK!THIS!
21
22PERL_FULLVERSION = $perl_fullversion
23
24# No -DPERL_CORE
25SO_CCCMD = \$(CC) $ccflags \$(OPTIMIZE)
26
[3188]27LD_OPT =
[3220]28PERL_DLL_LD_OPT = -Zdll -Zomf -Zhigh-mem -Zmap
[3181]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)
[3220]39$(LIBPERL) perl.lib: perl.imp perl5.def libperl_override.a
40 emximp -o $@ perl.imp
41 cp $@ perl.lib
[3181]42
[3220]43imp_version: #$(FIRSTMAKEFILE) -crap
[3181]44 echo $(PERL_DLL_BASE) > $@
45
[3220]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 > $@
[3181]48 echo 'strdup $(PERL_DLL_BASE) Perl_strdup ?' >> $@
49 echo 'putenv $(PERL_DLL_BASE) Perl_putenv ?' >> $@
50
[3220]51libperl_override.a: libperl_override.imp
[3181]52 emximp -o $@ libperl_override.imp
53
54libperl_dllmain.imp: imp_version
[3194]55 echo '_main $(PERL_DLL_BASE) _dll_perlmain ?' > $@
[3181]56
[3220]57libperl_dllmain$(LIB_EXT): libperl_dllmain.imp
[3181]58 emximp -o $@ libperl_dllmain.imp
59
[3220]60perl.imp: perl5.def imp_version
61 emximp -o $@ perl5.def
[3181]62
63
[3220]64.PHONY: perl_dll installcmd perlrexx test_prep_perl_ test_prep_various all_harness \
65 all_test test_harness_redir
[3181]66
67perl_dll: $(PERL_DLL)
68
69perl_dll_t: t/$(PERL_DLL)
70
71t/$(PERL_DLL): $(PERL_DLL)
[3220]72 cp -f $(PERL_DLL) t/$(PERL_DLL)
[3181]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
[3220]109miniperl.map: miniperl$(EXE_EXT)
[3181]110
[3220]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
[3181]114
[3220]115depend: os2ish.h os2thread.h
[3181]116
[3220]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/$@ $@
[3181]126
127os2ish.h: os2/os2ish.h
[3220]128 ln -s os2/$@ $@
[3181]129
130os2thread.h: os2/os2thread.h
[3220]131 ln -s os2/$@ $@
[3181]132
133installcmd :
134 @perl -e 'die qq{Give the option INSTALLCMDDIR=... to make!} if $$ARGV[0] eq ""' $(INSTALLCMDDIR)
[3220]135 ./miniperl$(EXE_EXT) -Ilib os2/perl2cmd.pl $(INSTALLCMDDIR)
[3181]136
[3220]137_preplibrary = miniperl$(EXE_EXT) lib/Config.pm lib/lib.pm lib/re.pm
[3181]138
139PERLREXX_DLL = perlrexx.dll
140
141# Dynamically loaded PM-application perl:
[3220]142perl__$(EXE_EXT): $& $(PERL_DLL) libperl_dllmain$(LIB_EXT)
143 $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o $@ libperl_dllmain$(LIB_EXT) -Zlinker /PM:PM
[3181]144
145# Forking dynamically loaded perl:
[3220]146perl$(EXE_EXT): $& $(PERLREXX_DLL) $(PERL_DLL) libperl_dllmain$(LIB_EXT)
147 $(CC) $(CLDFLAGS_DLL) $(CCDLFLAGS) -o $@ libperl_dllmain$(LIB_EXT)
[3181]148
[3220]149clean: os2_clean
[3181]150
[3220]151os2_clean:
152 rm -f *.map perlrexx.dll perl___[0-9]*
[3181]153
154perlrexx: $(PERLREXX_DLL)
155 @sh -c true
156
157# Remove -Zexe, add -Zdll -Zso. No stack needed
[3188]158SO_CLDFLAGS = -Zdll -Zomf
[3181]159
160# A callable-from-REXX DLL
161
[3200]162$(PERLREXX_DLL): perlrexx$(OBJ_EXT) perlrexx.def $(DYNALOADER) ext.libs
[3181]163 $(SHRPENV) $(CC) $(SO_CLDFLAGS) $(CCDLFLAGS) -o $@ perlrexx$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LIBPERL) `cat ext.libs` $(libs) perlrexx.def
164
[3220]165perlrexx.def: miniperl$(EXE_EXT) $(_preplibrary)
[3181]166 echo "LIBRARY 'perlrexx' INITINSTANCE TERMINSTANCE" > $@
[3220]167 echo "DESCRIPTION '@#[email protected]:`miniperl$(EXE_EXT) -Ilib -MConfig -e 'print \$$]'`#@ REXX to Perl `miniperl$(EXE_EXT) -Ilib -MConfig -e 'print \$$Config{version}'` interface'" >> $@
[3181]168 echo "EXPORTS" >> $@
[3188]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"' >> $@
[3181]179
180
181perlrexx$(OBJ_EXT): perlrexx.c
182 $(SO_CCCMD) $(PLDLFLAGS) -c perlrexx.c
183
[3220]184
[3181]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
[3220]190test_prep_perl_: test_prep_pre miniperl_$(EXE_EXT) ./perl_$(EXE_EXT)
[3181]191 PERL=./perl_ $(MAKE) _test_prep
192
[3220]193test_prep_various: test_prep_pre miniperl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
[3181]194
[3220]195all_test: test
[3181]196
197test_harness_redir: test_prep
198 -PERL=./perl $(MAKE) TESTFILE=harness _test $(REDIR_TEST)
199
[3220]200all_harness: test_harness_redir
[3181]201
202!NO!SUBS!
203
Note: See TracBrowser for help on using the repository browser.