Skip to content

Commit

Permalink
INIT/Mamfile: consolidate generated MAPLIB code into script
Browse files Browse the repository at this point in the history
This refactors and consolidates the shell code generated by the
former nmake MAPLIB rule into a new script, mkreq-maplib, that is
called from the Mamfile instead. It generates .req files that map
system library dependencies.

src/cmd/INIT/mkreq-maplib.sh:
- Added.

src/cmd/INIT/Mamfile:
- Replace old MAPLIB generated code with mkreq-maplib invocations.
- Also port Glenn Fowler's comments/rants from the original nmake
  Makefile, as they are informative as well as funny.
  • Loading branch information
McDutchie committed Jan 11, 2024
1 parent 6bb9d6c commit f044fa2
Show file tree
Hide file tree
Showing 2 changed files with 160 additions and 190 deletions.
257 changes: 67 additions & 190 deletions src/cmd/INIT/Mamfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ setv CCFLAGS ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?
setv CCLDFLAGS ${-strip-symbols?1?${mam_cc_LD_STRIP}??}
setv COTEMP $$
setv LDFLAGS
note *
note * initialization for all packages
note *
make install
make iffe
prev iffe.sh
Expand Down Expand Up @@ -56,6 +59,11 @@ make install
exec - ${STDCP} mkreq.sh mkreq
exec - test -w mkreq -a -x mkreq || ${STDCHMOD} u+w,+x mkreq
done mkreq generated
make mkreq-maplib
prev mkreq-maplib.sh
exec - ${STDCP} mkreq-maplib.sh mkreq-maplib
exec - test -w mkreq-maplib -a -x mkreq-maplib || ${STDCHMOD} u+w,+x mkreq-maplib
done mkreq-maplib generated
make mprobe
prev mprobe.sh
exec - ${STDCP} mprobe.sh mprobe
Expand Down Expand Up @@ -122,6 +130,11 @@ make install
exec - ${STDCMP} 2>/dev/null -s $src $dst || { ${STDMV} $dst $dst.old 2>/dev/null || true; ${STDCP} $src $dst ;}
exec - test -w $dst && test -x $dst || ${STDCHMOD} u+w,+x $dst
done __proto_stub dontcare virtual
note *
note * ksh93 function search on PATH
note * ksh93 builtin command library -lcmd
note * ksh93 ld library path search on PATH
note *
make ${INSTALLROOT}/bin/.paths
exec - if test ! -f ${INSTALLROOT}/bin/.paths -o -w ${INSTALLROOT}/bin/.paths
exec - then N='
Expand Down Expand Up @@ -271,6 +284,9 @@ make install
exec - esac
exec - fi
done ${INSTALLROOT}/bin/.paths generated
note *
note * probe initialization
note *
make ${INSTALLROOT}/lib/probe/C
exec - if test ! -d ${INSTALLROOT}/lib/probe/C
exec - then mkdir -p ${INSTALLROOT}/lib/probe/C
Expand Down Expand Up @@ -319,121 +335,52 @@ make install
exec - then mkdir -p ${INSTALLROOT}/lib/lib
exec - fi
done ${INSTALLROOT}/lib/lib generated
note *
note * check if -ldl is required
note *
note * NOTE: this works around the sgi botch:
note * (1) irix 5.* made -ldl optional but warned
note * (2) irix 6.* has no -ldl
note * (3) dynamic progs built on irix 5.* and using -ldl fail
note * at runtime on irix 6.* because -ldl is not there
note *
make ${INSTALLROOT}/lib/lib/dl
prev ${INSTALLROOT}/lib/lib
make dl.req
prev dl.c
exec - set +v +x
exec - r='-'
exec - for i in dl.c
exec - do if ${CC} -c $i > /dev/null
exec - then g=
exec - for p in dl -
exec - do case $p in
exec - -) if ${CC} -o dl.exe $i $g > /dev/null 2>&1
exec - then ${CC} -o dl.exe $i > /dev/null 2>&1 || {
exec - r="$g"
exec - break 2
exec - }
exec - fi
exec - g=
exec - ;;
exec - *) g="$g -l$p"
exec - ;;
exec - esac
exec - done
exec - fi
exec - done 2>/dev/null
exec - echo " $r" > dl.req
exec - ${STDRM} -f dl.exe dl
prev mkreq-maplib
exec - mkreq-maplib ${CC} : dl : dl.c : dl
done dl.req generated
exec - ${STDCMP} 2>/dev/null -s dl.req ${INSTALLROOT}/lib/lib/dl || { ${STDMV} ${INSTALLROOT}/lib/lib/dl ${INSTALLROOT}/lib/lib/dl.old 2>/dev/null || true; ${STDCP} dl.req ${INSTALLROOT}/lib/lib/dl ;}
done ${INSTALLROOT}/lib/lib/dl generated
note *
note * requiring these is a botch
note *
make ${INSTALLROOT}/lib/lib/iconv
make iconv.req
prev iconv.c
exec - set +v +x
exec - r='-'
exec - for i in iconv.c
exec - do if ${CC} -c $i > /dev/null
exec - then g=
exec - for p in iconv -
exec - do case $p in
exec - -) if ${CC} -o iconv.exe $i $g > /dev/null 2>&1
exec - then ${CC} -o iconv.exe $i > /dev/null 2>&1 || {
exec - r="$g"
exec - break 2
exec - }
exec - fi
exec - g=
exec - ;;
exec - *) g="$g -l$p"
exec - ;;
exec - esac
exec - done
exec - fi
exec - done 2>/dev/null
exec - echo " $r" > iconv.req
exec - ${STDRM} -f iconv.exe iconv
prev mkreq-maplib
exec - mkreq-maplib ${CC} : iconv : iconv.c : iconv
done iconv.req generated
exec - ${STDCMP} 2>/dev/null -s iconv.req ${INSTALLROOT}/lib/lib/iconv || { ${STDMV} ${INSTALLROOT}/lib/lib/iconv ${INSTALLROOT}/lib/lib/iconv.old 2>/dev/null || true; ${STDCP} iconv.req ${INSTALLROOT}/lib/lib/iconv ;}
done ${INSTALLROOT}/lib/lib/iconv generated
make ${INSTALLROOT}/lib/lib/w
make w.req
prev w.c
prev w2.c
exec - set +v +x
exec - r='-'
exec - for i in w.c w2.c
exec - do if ${CC} -c $i > /dev/null
exec - then g=
exec - for p in w -
exec - do case $p in
exec - -) if ${CC} -o w.exe $i $g > /dev/null 2>&1
exec - then ${CC} -o w.exe $i > /dev/null 2>&1 || {
exec - r="$g"
exec - break 2
exec - }
exec - fi
exec - g=
exec - ;;
exec - *) g="$g -l$p"
exec - ;;
exec - esac
exec - done
exec - fi
exec - done 2>/dev/null
exec - echo " $r" > w.req
exec - ${STDRM} -f w.exe w w2
prev mkreq-maplib
exec - mkreq-maplib ${CC} : w : w.c w2.c : w
done w.req generated
exec - ${STDCMP} 2>/dev/null -s w.req ${INSTALLROOT}/lib/lib/w || { ${STDMV} ${INSTALLROOT}/lib/lib/w ${INSTALLROOT}/lib/lib/w.old 2>/dev/null || true; ${STDCP} w.req ${INSTALLROOT}/lib/lib/w ;}
done ${INSTALLROOT}/lib/lib/w generated
note *
note * miscellaneous -l* checks
note *
make ${INSTALLROOT}/lib/lib/intl
make intl.req
prev intl.c
exec - set +v +x
exec - r='-'
exec - for i in intl.c
exec - do if ${CC} -c $i > /dev/null
exec - then g=
exec - for p in intl -
exec - do case $p in
exec - -) if ${CC} -o intl.exe $i $g > /dev/null 2>&1
exec - then ${CC} -o intl.exe $i > /dev/null 2>&1 || {
exec - r="$g"
exec - break 2
exec - }
exec - fi
exec - g=
exec - ;;
exec - *) g="$g -l$p"
exec - ;;
exec - esac
exec - done
exec - fi
exec - done 2>/dev/null
exec - echo " $r" > intl.req
exec - ${STDRM} -f intl.exe intl
prev mkreq-maplib
exec - mkreq-maplib ${CC} : intl : intl.c : intl
done intl.req generated
exec - ${STDCMP} 2>/dev/null -s intl.req ${INSTALLROOT}/lib/lib/intl || { ${STDMV} ${INSTALLROOT}/lib/lib/intl ${INSTALLROOT}/lib/lib/intl.old 2>/dev/null || true; ${STDCP} intl.req ${INSTALLROOT}/lib/lib/intl ;}
done ${INSTALLROOT}/lib/lib/intl generated
Expand All @@ -445,124 +392,54 @@ make install
prev m4.c
prev m5.c
prev m6.c
exec - set +v +x
exec - r='-'
exec - for i in m.c m2.c m3.c m4.c m5.c m6.c
exec - do if ${CC} -c $i > /dev/null
exec - then g=
exec - for p in m -
exec - do case $p in
exec - -) if ${CC} -o m.exe $i $g > /dev/null 2>&1
exec - then ${CC} -o m.exe $i > /dev/null 2>&1 || {
exec - r="$g"
exec - break 2
exec - }
exec - fi
exec - g=
exec - ;;
exec - *) g="$g -l$p"
exec - ;;
exec - esac
exec - done
exec - fi
exec - done 2>/dev/null
exec - echo " $r" > m.req
exec - ${STDRM} -f m.exe m m2 m3 m4 m5 m6
prev mkreq-maplib
exec - mkreq-maplib ${CC} : m : m.c m2.c m3.c m4.c m5.c m6.c : m
done m.req generated
exec - ${STDCMP} 2>/dev/null -s m.req ${INSTALLROOT}/lib/lib/m || { ${STDMV} ${INSTALLROOT}/lib/lib/m ${INSTALLROOT}/lib/lib/m.old 2>/dev/null || true; ${STDCP} m.req ${INSTALLROOT}/lib/lib/m ;}
done ${INSTALLROOT}/lib/lib/m generated
make ${INSTALLROOT}/lib/lib/nsl
make nsl.req
prev nsl.c
exec - set +v +x
exec - r='-'
exec - for i in nsl.c
exec - do if ${CC} -c $i > /dev/null
exec - then g=
exec - for p in nsl -
exec - do case $p in
exec - -) if ${CC} -o nsl.exe $i $g > /dev/null 2>&1
exec - then ${CC} -o nsl.exe $i > /dev/null 2>&1 || {
exec - r="$g"
exec - break 2
exec - }
exec - fi
exec - g=
exec - ;;
exec - *) g="$g -l$p"
exec - ;;
exec - esac
exec - done
exec - fi
exec - done 2>/dev/null
exec - echo " $r" > nsl.req
exec - ${STDRM} -f nsl.exe nsl
prev mkreq-maplib
exec - mkreq-maplib ${CC} : nsl : nsl.c : nsl
done nsl.req generated
exec - ${STDCMP} 2>/dev/null -s nsl.req ${INSTALLROOT}/lib/lib/nsl || { ${STDMV} ${INSTALLROOT}/lib/lib/nsl ${INSTALLROOT}/lib/lib/nsl.old 2>/dev/null || true; ${STDCP} nsl.req ${INSTALLROOT}/lib/lib/nsl ;}
done ${INSTALLROOT}/lib/lib/nsl generated
note *
note * what was sco smoking
note * almost all of gethost* are in -lnsl except gethostbyname which
note * is in -lsocket which isn't needed to resolve socket() but seems
note * to do the -lnsl job
note *
make ${INSTALLROOT}/lib/lib/socket
make socket.req
prev socket.c
prev nsl.c
exec - set +v +x
exec - r='-'
exec - for i in socket.c nsl.c
exec - do if ${CC} -c $i > /dev/null
exec - then g=
exec - for p in socket -
exec - do case $p in
exec - -) if ${CC} -o socket.exe $i $g > /dev/null 2>&1
exec - then ${CC} -o socket.exe $i > /dev/null 2>&1 || {
exec - r="$g"
exec - break 2
exec - }
exec - fi
exec - g=
exec - ;;
exec - *) g="$g -l$p"
exec - ;;
exec - esac
exec - done
exec - fi
exec - done 2>/dev/null
exec - echo " $r" > socket.req
exec - ${STDRM} -f socket.exe socket nsl
prev mkreq-maplib
exec - mkreq-maplib ${CC} : socket : socket.c nsl.c : socket
done socket.req generated
exec - ${STDCMP} 2>/dev/null -s socket.req ${INSTALLROOT}/lib/lib/socket || { ${STDMV} ${INSTALLROOT}/lib/lib/socket ${INSTALLROOT}/lib/lib/socket.old 2>/dev/null || true; ${STDCP} socket.req ${INSTALLROOT}/lib/lib/socket ;}
done ${INSTALLROOT}/lib/lib/socket generated
note *
note * more substance abuse
note * gdbm's ndbm "compatibility" doesn't supply <ndbm.h>, instead supplies
note * <gdbm/ndbm.h> which provides K&R prototypes *and* it requires -lgdbm
note * some <ndbm.h> implementations use -lndbm, others -ldbm, still others -lc
note * this is why unix is starting to look like windows
note * this map allows makefiles to use -ldbm on all systems
note *
note * and this just in: sometimes its <gdbm-ndbm.h> and possibly -lgdbm_compat
note *
note * at least the -l* buck stops here
note *
make ${INSTALLROOT}/lib/lib/dbm
make dbm.req
prev db.c
prev gdbm.c
make gdbm1.c
prev gdbm-ndbm.h implicit dontcare virtual
done gdbm1.c
make gdbm2.c
prev ndbm.h implicit dontcare virtual
done gdbm2.c
exec - set +v +x
exec - r='-'
exec - for i in db.c gdbm.c gdbm1.c gdbm2.c
exec - do if ${CC} -c $i > /dev/null
exec - then g=
exec - for p in db - gdbm_compat - gdbm - ndbm - dbm -
exec - do case $p in
exec - -) if ${CC} -o dbm.exe $i $g > /dev/null 2>&1
exec - then ${CC} -o dbm.exe $i > /dev/null 2>&1 || {
exec - r="$g"
exec - break 2
exec - }
exec - fi
exec - g=
exec - ;;
exec - *) g="$g -l$p"
exec - ;;
exec - esac
exec - done
exec - fi
exec - done 2>/dev/null
exec - echo " $r" > dbm.req
exec - ${STDRM} -f dbm.exe db gdbm gdbm1 gdbm2
prev gdbm1.c
prev gdbm2.c
prev mkreq-maplib
exec - mkreq-maplib ${CC} : dbm : db.c gdbm.c gdbm1.c gdbm2.c : db gdbm_compat gdbm ndbm dbm
done dbm.req generated
exec - ${STDCMP} 2>/dev/null -s dbm.req ${INSTALLROOT}/lib/lib/dbm || { ${STDMV} ${INSTALLROOT}/lib/lib/dbm ${INSTALLROOT}/lib/lib/dbm.old 2>/dev/null || true; ${STDCP} dbm.req ${INSTALLROOT}/lib/lib/dbm ;}
done ${INSTALLROOT}/lib/lib/dbm generated
Expand Down
Loading

0 comments on commit f044fa2

Please sign in to comment.