Build
上传用户:xu_441
上传日期:2007-01-04
资源大小:1640k
文件大小:18k
源码类别:

Email客户端

开发平台:

Unix_Linux

  1. #!/bin/sh
  2. # Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers.
  3. # All rights reserved.
  4. # Copyright (c) 1993, 1996-1997 Eric P. Allman.  All rights reserved.
  5. # Copyright (c) 1993
  6. # The Regents of the University of California.  All rights reserved.
  7. #
  8. # By using this file, you agree to the terms and conditions set
  9. # forth in the LICENSE file which can be found at the top level of
  10. # the sendmail distribution.
  11. #
  12. #
  13. #       $Id: Build,v 8.142 1999/11/16 03:09:50 gshapiro Exp $
  14. #
  15. #
  16. #  A quick-and-dirty script to compile sendmail and related programs
  17. #  in the presence of multiple architectures.  To use, just use
  18. #  "sh Build".
  19. #
  20. trap "rm -f $obj/.settings$$; exit" 1 2 3 15
  21. cflag=""
  22. mflag=""
  23. Mflag=""
  24. Aflag=""
  25. sflag=""
  26. makeargs=""
  27. libdirs=""
  28. incdirs=""
  29. libsrch=""
  30. libpath=""
  31. siteconfig=""
  32. pfx=""
  33. obj=""
  34. oscf=""
  35. arch=""
  36. os=""
  37. rel=""
  38. mkdir="mkdir -p"
  39. SENDMAIL_BUILD_FLAGS=""
  40. EX_OK=0
  41. EX_USAGE=64
  42. EX_NOINPUT=66
  43. EX_UNAVAILABLE=69
  44. full_src_dir=`pwd`
  45. if [ -z "$src_dir" ]
  46. then
  47. src_dir=`basename ${full_src_dir}`
  48. fi
  49. absolute_base_dir=`echo ${full_src_dir} | sed "s#${src_dir}##"`
  50. obj_rel_base_dir='../..'
  51. while [ ! -z "$1" ]
  52. do
  53. case $1
  54. in
  55.   -c) # clean out existing $obj tree
  56. cflag=1
  57. SENDMAIL_BUILD_FLAGS="$SENDMAIL_BUILD_FLAGS $1"
  58. shift
  59. ;;
  60.   -m) # show Makefile name only
  61. mflag=1
  62. shift
  63. ;;
  64.   -M) # show the name of the obj. directory
  65. Mflag=1
  66. shift
  67. ;;
  68.   -A)   # show the name of the architecture
  69. Aflag=1
  70. shift
  71. ;;
  72.   -E*) # environment variables to pass into Build
  73. arg=`echo $1 | sed 's/^-E//'`
  74. if [ -z "$arg" ]
  75. then
  76.     shift   # move to argument
  77.     arg=$1
  78. fi
  79. if [ -z "$arg" ]
  80. then
  81. echo "Empty -E flag" >&2
  82. exit $EX_USAGE
  83. else
  84. case $arg
  85. in
  86.   *=*) # check format
  87. eval $arg
  88. export `echo $arg | sed 's;=.*;;'`
  89. SENDMAIL_BUILD_FLAGS="$SENDMAIL_BUILD_FLAGS -E "$arg""
  90. ;;
  91.   *) # bad format
  92. echo "Bad format for -E argument ($arg)" >&2
  93. exit $EX_USAGE
  94. ;;
  95. esac
  96. shift
  97. fi
  98. ;;
  99.   -L*) # set up LIBDIRS
  100. libdirs="$libdirs $1"
  101. SENDMAIL_BUILD_FLAGS="$SENDMAIL_BUILD_FLAGS $1"
  102. shift
  103. ;;
  104.   -I*) # set up INCDIRS
  105. incdirs="$incdirs $1"
  106. SENDMAIL_BUILD_FLAGS="$SENDMAIL_BUILD_FLAGS $1"
  107. shift
  108. ;;
  109.   -f*) # select site config file
  110. arg=`echo $1 | sed 's/^-f//'`
  111. if [ -z "$arg" ]
  112. then
  113.     shift   # move to argument
  114.     arg=$1
  115. fi
  116. if [ "$pfx" ]
  117. then
  118. echo "May not use -f and -Q together"
  119. exit $EX_USAGE
  120. fi
  121. if [ "$siteconfig" ]
  122. then
  123. echo "Only one -f flag allowed" >&2
  124. exit $EX_USAGE
  125. else
  126. siteconfig=$arg
  127. if [ -z "$siteconfig" ]
  128. then
  129. echo "Missing argument for -f flag" >&2
  130. exit $EX_USAGE
  131. elif [ ! -f "$siteconfig" ]
  132. then
  133. echo "${siteconfig}: File not found"
  134. exit $EX_NOINPUT
  135. else
  136. shift # move past argument
  137. case $arg
  138. in
  139. /*)
  140. SENDMAIL_BUILD_FLAGS="$SENDMAIL_BUILD_FLAGS -f "$siteconfig""
  141. ;;
  142. *)
  143. SENDMAIL_BUILD_FLAGS="$SENDMAIL_BUILD_FLAGS -f "${full_src_dir}/$siteconfig""
  144. ;;
  145. esac
  146. fi
  147. fi
  148. ;;
  149.   -O*) # Set object directory manually.
  150. arg="`echo $1 | sed 's/^-O//'`"
  151. if [ -z "$arg" ]
  152. then
  153.     shift   # move to argument
  154.     arg="$1"
  155. fi
  156. case $arg
  157. in
  158. /*)
  159. OBJ_ROOT="$arg"
  160. SENDMAIL_BUILD_FLAGS="$SENDMAIL_BUILD_FLAGS -O "$OBJ_ROOT""
  161. obj_rel_base_dir=$absolute_base_dir
  162. ;;
  163. *)
  164. echo "Absolute directory path required for -O flag" >&2
  165. exit $EX_USAGE
  166. ;;
  167. esac
  168. shift
  169. ;;
  170.   -S) # skip auto-configure
  171. sflag="-s"
  172. SENDMAIL_BUILD_FLAGS="$SENDMAIL_BUILD_FLAGS $1"
  173. shift
  174. ;;
  175.   -Q*) # Select a prefix for the Site/*.config.m4 file
  176. arg=`echo $1 | sed 's/^-Q//'`
  177. if [ -z "$arg" ]
  178. then
  179.     shift   # move to argument
  180.     arg=$1
  181. fi
  182. if [ -z "$arg" ]
  183. then
  184. echo "Empty -Q flag" >&2
  185. exit $EX_USAGE
  186. elif [ "$siteconfig" ]
  187. then
  188. echo "May not use -Q and -f together" >&2
  189. exit $EX_USAGE
  190. elif [ "$pfx" ]
  191. then
  192. echo "Only one -Q allowed" >&2
  193. exit $EX_USAGE
  194. else
  195. pfx=$arg
  196. SENDMAIL_BUILD_FLAGS="$SENDMAIL_BUILD_FLAGS -Q "$pfx""
  197. fi
  198. shift
  199. ;;
  200.   *) # pass argument to make
  201. makeargs="$makeargs "$1""
  202. SENDMAIL_BUILD_FLAGS="$SENDMAIL_BUILD_FLAGS "$1""
  203. shift
  204. ;;
  205. esac
  206. done
  207. #
  208. #  Do heuristic guesses !ONLY! for machines that do not have uname
  209. #
  210. if [ -d /NextApps -a ! -f /bin/uname -a ! -f /usr/bin/uname ]
  211. then
  212. # probably a NeXT box
  213. arch=`hostinfo | sed -n 's/.*Processor type: ([^ ]*).*/1/p'`
  214. os=NeXT
  215. rel=`hostinfo | sed -n 's/.*NeXT Mach ([0-9.]*).*/1/p'`
  216. elif [ -f /usr/sony/bin/machine -a -f /etc/osversion ]
  217. then
  218. # probably a Sony NEWS 4.x
  219. os=NEWS-OS
  220. rel=`awk '{ print $3}' /etc/osversion`
  221. arch=`/usr/sony/bin/machine`
  222. elif [ -d /usr/omron -a -f /bin/luna ]
  223. then
  224. # probably a Omron LUNA
  225. os=LUNA
  226. if [ -f /bin/luna1 ] && /bin/luna1
  227. then
  228. rel=unios-b
  229. arch=luna1
  230. elif [ -f /bin/luna2 ] && /bin/luna2
  231. then
  232. rel=Mach
  233. arch=luna2
  234. elif [ -f /bin/luna88k ] && /bin/luna88k
  235. then
  236. rel=Mach
  237. arch=luna88k
  238. fi
  239. elif [ -d /usr/apollo -a -d `node_data ]
  240. then
  241. # probably a Apollo/DOMAIN
  242. os=DomainOS
  243. arch=$ISP
  244. rel=`/usr/apollo/bin/bldt | grep Domain | awk '{ print $4 }' | sed -e 's/,//g'`
  245. fi
  246. if [ ! "$arch" -a ! "$os" -a ! "$rel" ]
  247. then
  248. arch=`uname -m | sed -e 's/ //g' -e 's///-/g'`
  249. os=`uname -s | sed -e 's///-/g' -e 's/ //g'`
  250. rel=`uname -r | sed -e 's/(/-/g' -e 's/)//g' -e 's/ //g'`
  251. fi
  252. #
  253. #  Tweak the values we have already got.  PLEASE LIMIT THESE to
  254. #  tweaks that are absolutely necessary because your system uname
  255. #  routine doesn't return something sufficiently unique.  Don't do
  256. #  it just because you don't like the name that is returned.  You
  257. #  can combine the architecture name with the os name to create a
  258. #  unique Makefile name.
  259. #
  260. # tweak machine architecture
  261. case $arch
  262. in
  263.   sun4*) arch=sun4;;
  264.   9000/*) arch=`echo $arch | sed -e 's/9000.//' -e 's/..$/xx/'`;;
  265.   DS/907000) arch=ds90;;
  266.   NILE*) arch=NILE
  267. os=`uname -v`;;
  268.   CRAYT3E|CRAYTS)
  269. os=$arch;;
  270. esac
  271. # tweak operating system type and release
  272. node=`uname -n | sed -e 's///-/g' -e 's/ //g'`
  273. if [ "$os" = "$node" -a "$arch" = "i386" -a "$rel" = 3.2 -a "`uname -v`" = 2 ]
  274. then
  275. # old versions of SCO UNIX set uname -s the same as uname -n
  276. os=SCO_SV
  277. fi
  278. if [ "$rel" = 4.0 ]
  279. then
  280. case $arch in
  281.   3[34]??|3[34]??,*)
  282. if [ -d /usr/sadm/sysadm/add-ons/WIN-TCP ]
  283. then
  284. os=NCR.MP-RAS.2.x
  285. elif [ -d /usr/sadm/sysadm/add-ons/inet ]
  286. then
  287. os=NCR.MP-RAS.3.x
  288. fi
  289. ;;
  290. esac
  291. fi
  292. case $os
  293. in
  294.   DYNIX-ptx) os=PTX;;
  295.   Paragon*) os=Paragon;;
  296.   HP-UX) rel=`echo $rel | sed -e 's/^[^.]*.0*//'`;;
  297.   AIX) rela=$rel
  298. rel=`uname -v`
  299. arch=PPC
  300. rel=$rel.$rela
  301. ;;
  302.   BSD-386) os=BSD-OS;;
  303.   SCO_SV) os=SCO; rel=`uname -X | sed -n 's/Release = 3.2v//p'`;;
  304.   UNIX_System_V) if [ "$arch" = "ds90" ]
  305. then
  306. os="UXPDS"
  307. rel=`uname -v | sed -e 's/(V.*)L.*/1/'`
  308. fi;;
  309.   ReliantUNIX-?|SINIX-?) os=SINIX;;
  310.   DomainOS) case $rel in
  311.   10.4*) rel=10.4;;
  312. esac
  313. ;;
  314.   IRIX*) rel=`echo $rel | sed -e 's/-.*$//'`;;
  315.   NeXT) mkdir="mkdirs";;
  316. esac
  317. # get "base part" of operating system release
  318. rroot=`echo $rel | sed -e 's/.[^.]*$//'`
  319. rbase=`echo $rel | sed -e 's/..*//'`
  320. if [ "$rroot" = "$rbase" ]
  321. then
  322. rroot=$rel
  323. fi
  324. # heuristic tweaks to clean up names -- PLEASE LIMIT THESE!
  325. if [ "$os" = "unix" ]
  326. then
  327. # might be Altos System V
  328. case $rel
  329. in
  330.   5.3*) os=Altos;;
  331. esac
  332. elif [ -r /unix -a -r /usr/lib/libseq.a -a -r /lib/cpp ]
  333. then
  334. # might be a DYNIX/ptx 2.x system, which has a broken uname
  335. if strings /lib/cpp | grep _SEQUENT_ > /dev/null
  336. then
  337. os=PTX
  338. fi
  339. elif [ -d /usr/nec ]
  340. then
  341. # NEC machine -- what is it running?
  342. if [ "$os" = "UNIX_System_V" ]
  343. then
  344. os=EWS-UX_V
  345. elif [ "$os" = "UNIX_SV" ]
  346. then
  347. os=UX4800
  348. fi
  349. elif [ "$arch" = "mips" ]
  350. then
  351. case $rel
  352. in
  353.   4_*)
  354. if [ `uname -v` = "UMIPS" ]
  355. then
  356. os=RISCos
  357. fi;;
  358. esac
  359. fi
  360. # see if there is a "user suffix" specified
  361. if [ "${SENDMAIL_SUFFIX-}x" = "x" ]
  362. then
  363. sfx=""
  364. else
  365. sfx=".${SENDMAIL_SUFFIX}"
  366. fi
  367. if [ ! -n "$Mflag" -a ! -n "$Aflag" ]
  368. then
  369. echo "Configuration: pfx=$pfx, os=$os, rel=$rel, rbase=$rbase, rroot=$rroot, arch=$arch, sfx=$sfx"
  370. fi
  371. SMROOT=${SMROOT-..}
  372. BUILDTOOLS=${BUILDTOOLS-$SMROOT/devtools}
  373. export SMROOT BUILDTOOLS
  374. # see if we are in a Build-able directory
  375. if [ ! -f Makefile.m4 -a ! -n "$Aflag" ]; then
  376. echo "Makefile.m4 not found.  Build can only be run from a source directory."
  377. exit $EX_UNAVAILABLE
  378. fi
  379. incdirs="$incdirs -I${SRCDIR}/include"
  380. if [ -z "$OBJ_ROOT" ]; then
  381. OBJ_ROOT=${SMROOT}
  382. fi
  383. if [ "${pfx}x" = "x" ]
  384. then
  385. prefix=""
  386. else
  387. prefix=".$pfx"
  388. fi
  389. # Print out the architecture (to build up an obj dir path) and exit
  390. if [ -n "$Aflag" ]
  391. then
  392. echo "$os.$rel.$arch$sfx"
  393. exit $EX_OK
  394. fi
  395. # now try to find a reasonable object directory
  396. if [ -r ${OBJ_ROOT}/obj${prefix}.$os.$rel.$arch$sfx ]; then
  397. obj=${OBJ_ROOT}/obj${prefix}.$os.$rel.$arch$sfx
  398. elif [ -r ${OBJ_ROOT}/obj${prefix}.$os.$rroot.$arch$sfx ]; then
  399. obj=${OBJ_ROOT}/obj${prefix}.$os.$rroot.$arch$sfx
  400. elif [ -r ${OBJ_ROOT}/obj${prefix}.$os.$rbase.x.$arch$sfx ]; then
  401. obj=${OBJ_ROOT}/obj${prefix}.$os.$rbase.x.$arch$sfx
  402. elif [ -r ${OBJ_ROOT}/obj${prefix}.$os.$rel$sfx ]; then
  403. obj=${OBJ_ROOT}/obj${prefix}.$os.$rel$sfx
  404. elif [ -r ${OBJ_ROOT}/obj${prefix}.$os.$rbase.x$sfx ]; then
  405. obj=${OBJ_ROOT}/obj${prefix}.$os.$rbase.x$sfx
  406. elif [ -r ${OBJ_ROOT}/obj${prefix}.$os.$arch$sfx ]; then
  407. obj=${OBJ_ROOT}/obj${prefix}.$os.$arch$sfx
  408. elif [ -r ${OBJ_ROOT}/obj${prefix}.$rel.$arch$sfx ]; then
  409. obj=${OBJ_ROOT}/obj${prefix}.$rel.$arch$sfx
  410. elif [ -r ${OBJ_ROOT}/obj${prefix}.$rbase.x.$arch$sfx ]; then
  411. obj=${OBJ_ROOT}/obj${prefix}.$rbase.x.$arch$sfx
  412. elif [ -r ${OBJ_ROOT}/obj${prefix}.$os$sfx ]; then
  413. obj=${OBJ_ROOT}/obj${prefix}.$os$sfx
  414. elif [ -r ${OBJ_ROOT}/obj${prefix}.$arch$sfx ]; then
  415. obj=${OBJ_ROOT}/obj${prefix}.$arch$sfx
  416. elif [ -r ${OBJ_ROOT}/obj${prefix}.$rel$sfx ]; then
  417. obj=${OBJ_ROOT}/obj${prefix}.$rel$sfx
  418. elif [ -r ${OBJ_ROOT}/obj${prefix}.$sfx ]; then
  419. obj=${OBJ_ROOT}/obj${prefix}.$sfx
  420. fi
  421. if [ -n "$obj" ]
  422. then
  423. obj=${obj}/${src_dir}
  424. fi
  425. # Print the directory which would be used for the build and exit
  426. if [ -n "$Mflag" ]
  427. then
  428. if [ ! -n "$obj" ]
  429. then
  430. obj=${OBJ_ROOT}/obj.$os.$rel.$arch$sfx/${src_dir}
  431. fi
  432. echo "$obj"
  433. exit $EX_OK
  434. fi
  435. # Check if trying to use -f with an existing obj directory
  436. if [ -n "$siteconfig" -a -n "$obj" -a -d "$obj" -a -z "$cflag" ]
  437. then
  438. echo "Can not use Build's -f flag with an existing object tree."
  439. echo "If you wish to change configuration information, use the -c flag to clear"
  440. echo "the existing $obj tree."
  441. exit $EX_USAGE
  442. fi
  443. # Check if trying to use -Q with an existing obj directory
  444. if [ -n "$pfx" -a -n "$obj" -a -d "$obj" -a -z "$cflag" ]
  445. then
  446. echo "Can not use Build's -Q flag with an existing object tree."
  447. echo "If you wish to change configuration information, use the -c flag to clear"
  448. echo "the existing $obj tree."
  449. exit $EX_USAGE
  450. fi
  451. # Clean out the directory before building.
  452. if [ "$cflag" ]
  453. then
  454. if [ -n "$obj" ]
  455. then
  456. echo "Clearing out existing $obj tree"
  457. rm -rf $obj
  458. fi
  459. fi
  460. # If we didn't detect an existing obj directory, makeup a new obj name.
  461. if [ -z "$obj" ]
  462. then
  463. obj=${OBJ_ROOT}/obj${prefix}.$os.$rel.$arch$sfx/${src_dir}
  464. fi
  465. # Check if obj directory exists
  466. if [ ! -r "$obj" ]
  467. then
  468. if [ -r $BUILDTOOLS/OS/$os.$rel.$arch$sfx ]; then
  469. oscf=$os.$rel.$arch$sfx
  470. elif [ -r $BUILDTOOLS/OS/$os.$rel.$arch ]; then
  471. oscf=$os.$rel.$arch
  472. elif [ -r $BUILDTOOLS/OS/$os.$rroot.$arch$sfx ]; then
  473. oscf=$os.$rroot.$arch$sfx
  474. elif [ -r $BUILDTOOLS/OS/$os.$rroot.$arch ]; then
  475. oscf=$os.$rroot.$arch
  476. elif [ -r $BUILDTOOLS/OS/$os.$rbase.x.$arch$sfx ]; then
  477. oscf=$os.$rbase.x.$arch$sfx
  478. elif [ -r $BUILDTOOLS/OS/$os.$rbase.x.$arch ]; then
  479. oscf=$os.$rbase.x.$arch
  480. elif [ -r $BUILDTOOLS/OS/$os.$rel$sfx ]; then
  481. oscf=$os.$rel$sfx
  482. elif [ -r $BUILDTOOLS/OS/$os.$rel ]; then
  483. oscf=$os.$rel
  484. elif [ -r $BUILDTOOLS/OS/$os.$rroot$sfx ]; then
  485. oscf=$os.$rroot$sfx
  486. elif [ -r $BUILDTOOLS/OS/$os.$rroot ]; then
  487. oscf=$os.$rroot
  488. elif [ -r $BUILDTOOLS/OS/$os.$rbase.x$sfx ]; then
  489. oscf=$os.$rbase.x$sfx
  490. elif [ -r $BUILDTOOLS/OS/$os.$rbase.x ]; then
  491. oscf=$os.$rbase.x
  492. elif [ -r $BUILDTOOLS/OS/$os.$arch$sfx ]; then
  493. oscf=$os.$arch$sfx
  494. elif [ -r $BUILDTOOLS/OS/$os.$arch ]; then
  495. oscf=$os.$arch
  496. elif [ -r $BUILDTOOLS/OS/$rel.$arch$sfx ]; then
  497. oscf=$rel.$arch$sfx
  498. elif [ -r $BUILDTOOLS/OS/$rel.$arch ]; then
  499. oscf=$rel.$arch
  500. elif [ -r $BUILDTOOLS/OS/$rroot.$arch$sfx ]; then
  501. oscf=$rroot.$arch$sfx
  502. elif [ -r $BUILDTOOLS/OS/$rroot.$arch ]; then
  503. oscf=$rroot.$arch
  504. elif [ -r $BUILDTOOLS/OS/$rbase.x.$arch$sfx ]; then
  505. oscf=$rbase.x.$arch$sfx
  506. elif [ -r $BUILDTOOLS/OS/$rbase.x.$arch ]; then
  507. oscf=$rbase.x.$arch
  508. elif [ -r $BUILDTOOLS/OS/$os$sfx ]; then
  509. oscf=$os$sfx
  510. elif [ -r $BUILDTOOLS/OS/$os ]; then
  511. oscf=$os
  512. elif [ -r $BUILDTOOLS/OS/$arch$sfx ]; then
  513. oscf=$arch$sfx
  514. elif [ -r $BUILDTOOLS/OS/$arch ]; then
  515. oscf=$arch
  516. elif [ -r $BUILDTOOLS/OS/$rel$sfx ]; then
  517. oscf=$rel$sfx
  518. elif [ -r $BUILDTOOLS/OS/$rel ]; then
  519. oscf=$rel
  520. elif [ -r $BUILDTOOLS/OS/$rel$sfx ]; then
  521. oscf=$rel$sfx
  522. else
  523. echo "Cannot determine how to support $arch.$os.$rel" >&2
  524. exit $EX_UNAVAILABLE
  525. fi
  526. M4=`sh $BUILDTOOLS/bin/find_m4.sh`
  527. ret=$?
  528. if [ $ret -ne 0 ]
  529. then
  530. exit $ret
  531. fi
  532. echo "Using M4=$M4"
  533. export M4
  534. if [ "$mflag" ]
  535. then
  536. echo "Will run in virgin $obj using $BUILDTOOLS/OS/$oscf"
  537. exit $EX_OK
  538. fi
  539. echo "Creating $obj using $BUILDTOOLS/OS/$oscf"
  540. ${mkdir} $obj
  541. # If this is WINNT then compile with relative paths
  542. # (based on REL_SRC_DIR), so we don't need to do any "linking"
  543. if [ ! $os = "WINNT" ]
  544. then
  545. ln="ln -s"
  546. (cd $obj; $ln ${obj_rel_base_dir}/${src_dir}/*.[ch13458] .)
  547. (cd $obj
  548. # This glob doesn't actually glob to something everywhere,
  549. # thus the protective measures.
  550. for i in ${obj_rel_base_dir}/${src_dir}/*.0 
  551. do 
  552. if [ -f $i ] 
  553. then 
  554. $ln $i `basename $i`.dist 
  555. fi 
  556. done)
  557. if [ -f helpfile ]
  558. then
  559. (cd $obj; $ln ${obj_rel_base_dir}/${src_dir}/helpfile .)
  560. fi
  561. fi
  562. rm -f $obj/.settings$$
  563. echo 'divert(-1)' > $obj/.settings$$
  564. cat $BUILDTOOLS/M4/header.m4 >> $obj/.settings$$
  565. cat $BUILDTOOLS/OS/$oscf >> $obj/.settings$$
  566. if [ $os = "WINNT" ]
  567. then
  568. # Append C: onto pwd's which don't have the preceding //
  569. # so that we can compile on non-network drives.
  570. # (Is there a way to get the real drive letter?)
  571. dir_prefix=`echo $absolute_base_dir | sed 's#(..).*#1#'`
  572. if [ ! $dir_prefix = "//" ]
  573. then
  574. absolute_base_dir="//C$absolute_base_dir"
  575. fi
  576.         # Convert sh's //X to X: drive letters to make make (and cl) happy
  577. obj_rel_base_dir=`echo $absolute_base_dir | sed 's#^//([a-zA-Z])#1:#'`
  578. cur_dir=`pwd`
  579. cd $obj/..
  580. absolute_obj_dir=`pwd | sed 's#/#\\\\#g'`
  581. cd $cur_dir
  582. echo "ifdef(`bldABS_OBJ_DIR',,define(`bldABS_OBJ_DIR', `$absolute_obj_dir'))" >> $obj/.settings$$
  583. rel_src_dir="$obj_rel_base_dir/$src_dir"
  584. echo "define(`bldREL_SRC_DIR', `$rel_src_dir')" >> $obj/.settings$$
  585. else
  586. cur_dir=`pwd`
  587. cd $obj/..
  588. absolute_obj_dir=`pwd`
  589. cd $cur_dir
  590. echo "ifdef(`bldABS_OBJ_DIR',,define(`bldABS_OBJ_DIR', `$absolute_obj_dir'))" >> $obj/.settings$$
  591. rel_src_dir="$obj_rel_base_dir/$src_dir"
  592. echo "define(`bldREL_SRC_DIR', `$rel_src_dir')" >> $obj/.settings$$
  593. fi
  594. if [ ! -z "$pfx" ]
  595. then
  596. # They gave us a specific prefix, let's try it out.
  597. if [ -f $BUILDTOOLS/Site/$pfx.$oscf$sfx.m4 ]
  598. then
  599. siteconfig=$BUILDTOOLS/Site/$pfx.$oscf$sfx.m4
  600. elif [ -f $BUILDTOOLS/Site/$pfx.$oscf.m4 ]
  601. then
  602. siteconfig=$BUILDTOOLS/Site/$pfx.$oscf.m4
  603. fi
  604. if [ -f $BUILDTOOLS/Site/$pfx.config.m4 ]
  605. then
  606. siteconfig="$BUILDTOOLS/Site/$pfx.config.m4 $siteconfig"
  607. fi
  608. elif [ -z "$siteconfig" ]
  609. then
  610. # none specified, use defaults
  611. if [ -f $BUILDTOOLS/Site/site.$oscf$sfx.m4 ]
  612. then
  613. siteconfig=$BUILDTOOLS/Site/site.$oscf$sfx.m4
  614. elif [ -f $BUILDTOOLS/Site/site.$oscf.m4 ]
  615. then
  616. siteconfig=$BUILDTOOLS/Site/site.$oscf.m4
  617. fi
  618. if [ -f $BUILDTOOLS/Site/site.config.m4 ]
  619. then
  620. siteconfig="$BUILDTOOLS/Site/site.config.m4 $siteconfig"
  621. fi
  622. fi
  623. if [ ! -z "$siteconfig" ]
  624. then
  625. echo "Including $siteconfig"
  626. cat $siteconfig >> $obj/.settings$$
  627. fi
  628. if [ "$libdirs" ]
  629. then
  630. echo "define(`confLIBDIRS', confLIBDIRS ``$libdirs'')" >> $obj/.settings$$
  631. fi
  632. if [ "$incdirs" ]
  633. then
  634. echo "define(`confINCDIRS', ``$incdirs'' confINCDIRS)" >> $obj/.settings$$
  635. fi
  636. echo "define(`_SRC_PATH_', ``$obj_rel_base_dir'')" >> $obj/.settings$$
  637. echo 'divert(0)dnl' >> $obj/.settings$$
  638. libdirs=`(cat $obj/.settings$$; echo "_SRIDBIL_= confLIBDIRS" ) | 
  639. sed -e 's/(.)include/1_include_/g' -e 's/#define/#_define_/g' | 
  640. ${M4} -DconfBUILDTOOLSDIR=$BUILDTOOLS - | 
  641. grep "^_SRIDBIL_=" | 
  642. sed -e 's/#_define_/#define/g' -e 's/_include_/include/g' -e "s/^_SRIDBIL_=//"`
  643. libsrch=`(cat $obj/.settings$$; echo "_HCRSBIL_= confLIBSEARCH" ) | 
  644. sed -e 's/(.)include/1_include_/g' -e 's/#define/#_define_/g' | 
  645. ${M4} -DconfBUILDTOOLSDIR=$BUILDTOOLS - | 
  646. grep "^_HCRSBIL_=" | 
  647. sed -e 's/#_define_/#define/g' -e 's/_include_/include/g' -e "s/^_HCRSBIL_=//"`
  648. libpath=`(cat $obj/.settings$$; echo "_HCRSBIL_= confLIBSEARCHPATH" ) | 
  649. sed -e 's/(.)include/1_include_/g' -e 's/#define/#_define_/g' | 
  650. ${M4} -DconfBUILDTOOLSDIR=$BUILDTOOLS - | 
  651. grep "^_HCRSBIL_=" | 
  652. sed -e 's/#_define_/#define/g' -e 's/_include_/include/g' -e "s/^_HCRSBIL_=//"`
  653. echo 'divert(-1)' >> $obj/.settings$$
  654. LIBDIRS="$libdirs" LIBSRCH="$libsrch" LIBPATH="$libpath" SITECONFIG="$siteconfig" sh $BUILDTOOLS/bin/configure.sh $sflag $oscf >> $obj/.settings$$
  655. echo 'divert(0)dnl' >> $obj/.settings$$
  656. sed -e 's/(.)include/1_include_/g' -e 's/#define/#_define_/g' -e 's/ //g' $obj/.settings$$ | 
  657. ${M4} -DconfBUILDTOOLSDIR=$BUILDTOOLS - Makefile.m4 | 
  658. sed -e 's/#_define_/#define/g' -e 's/_include_/include/g' -e 's/ //g' > $obj/Makefile
  659. # That ^M up there was added by quoting it in emacs.
  660. # Make has problems if lines end in ^M^M, but not in ^M apparently
  661. if [ $? -ne 0 -o ! -s $obj/Makefile ]
  662. then
  663. echo "ERROR: ${M4} failed; You may need a newer version of M4, at least as new as System V or GNU" 1>&2
  664. rm -rf $obj
  665. exit $EX_UNAVAILABLE
  666. fi
  667. rm -f $obj/.settings$$
  668. echo "Making dependencies in $obj"
  669. (cd $obj; ${MAKE-make} depend)
  670. fi
  671. if [ "$mflag" ]
  672. then
  673. makefile=`ls -l $obj/Makefile | sed 's/.* //'`
  674. if [ -z "$makefile" ]
  675. then
  676. echo "ERROR: $obj exists but has no Makefile" >&2
  677. exit $EX_NOINPUT
  678. fi
  679. echo "Will run in existing $obj using $makefile"
  680. exit $EX_OK
  681. fi
  682. echo "Making in $obj"
  683. cd $obj
  684. eval exec ${MAKE-make} SENDMAIL_BUILD_FLAGS="$SENDMAIL_BUILD_FLAGS" $makeargs