aboutsummaryrefslogblamecommitdiff
path: root/Makefile.upgrade
blob: c32b31868602f7a35eb6274cb8545c1daefe017b (plain) (tree)
1
2
 
                                                                   














                                                                        

                                                                   
























                                                                              
                                                                 























                                                                              
                                                                 























                                                                                                                                                                                                                                                      





































                                                                                          
                       









                                                                              


                                                                                   



                                                    








                                                                           
                       






                                                                              
      
                                    
























                                                                              
                                     

                                                                              
                                                               









                                                                              



                                                              
                                                                 
                                                     

                                                               
                                                    

                                                               








                                                                           
                       








                                                                              
      



















                                                                              
                                                        






                                                                            
                                     







                                                                              
                       



                                                                              
                                                                        





                                                                                           
      












                                                                              
#
#	$Id: Makefile.upgrade,v 1.8 1999/01/07 06:30:14 peter Exp $
#
# This makefile contains rules for preforming upgrades that are outside
# the scope of the normal build world process.
#

#
# Build things relative to the user's preferred object directory,
# defaulting to /usr/obj if not defined.
#
MAKEOBJDIRPREFIX?=/usr/obj

#
# The installed operating system release gives us the hint as to whether
# we need to build a kernel too.
#
INSTALLEDVERSION!=sh ${.CURDIR}/tools/tools/upgrade/getosreldate.sh
INSTALLEDNAME!=uname -r

#
# Upgrade the installed make to the current version using the installed
# headers, libraries and build tools. This is required on installed versions
# prior to 2.2.5 in which the installed make doesn't support the -m argument.
#
make	:
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Upgrading the installed make"
	@echo "--------------------------------------------------------------"
	@cd ${.CURDIR}/usr.bin/make; \
		make obj && make depend && make all && make install

#
# Upgrade from aout to elf, doing an aout build first to ensure that there
# are up-to-date tools before building the initial elf world. The aout
# tools just built into the object directory tree and executed from there
# during the elf build. Then install the aout tools, build an aout kernel
# with them (in case the installed kernel is an older version), then 
# install the elf world.
#
aout-to-elf aout-to-elf-install :				\
		${MAKEOBJDIRPREFIX}/do_aout_buildworld		\
		${MAKEOBJDIRPREFIX}/do_elf_buildworld		\
		${MAKEOBJDIRPREFIX}/do_move_aout_libs		\
		${MAKEOBJDIRPREFIX}/do_aout_installworld	\
		${MAKEOBJDIRPREFIX}/do_aout_kernel		\
		${MAKEOBJDIRPREFIX}/do_elf_installworld		\
		${MAKEOBJDIRPREFIX}/do_set_objformat		\
		${MAKEOBJDIRPREFIX}/do_install_kernel_reboot

#
# Just do the build parts of the transition build.
#
aout-to-elf-build :						\
		${MAKEOBJDIRPREFIX}/do_aout_buildworld		\
		${MAKEOBJDIRPREFIX}/do_elf_buildworld		

#
# The installed system may not have tools capable of building an elf
# aware world, so a complete aout buildworld is required to get a known
# set of tools.
#
${MAKEOBJDIRPREFIX}/do_aout_buildworld :
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Doing an aout buildworld to get an up-to-date set of tools"
	@echo "--------------------------------------------------------------"
	@cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/aout \
		OBJFORMAT=aout REALLY_WANT_DEPRECIATED_AOUT=yes \
		make -f Makefile.inc1 -m ${.CURDIR}/share/mk buildworld
	@touch ${MAKEOBJDIRPREFIX}/do_aout_buildworld

#
# Temporary path for initial elf build.
#
AOUTTMPPATH=	${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/sbin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/bin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/usr/sbin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/usr/bin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/usr/games

#
# Use the aout tools from the aout buildworld to do an elf buildworld.
#
${MAKEOBJDIRPREFIX}/do_elf_buildworld :
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Doing an elf buildworld using the aout tools in the aout"
	@echo " obj tree."
	@echo "--------------------------------------------------------------"
	@cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/elf \
		PATH=${AOUTTMPPATH} OBJFORMAT=elf NOTOOLS=1 \
		TOOLROOT=${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp \
		make -f Makefile.inc1 -m ${.CURDIR}/share/mk buildworld
	@touch ${MAKEOBJDIRPREFIX}/do_elf_buildworld

#
# ldconfig should list the directories that the system is currently using.
#
CUSTOM_LIBDIRS!=ldconfig -r | grep search | sed "s/search directories: //" | sed "s/:/ /g"

#
# These are the standard library directories that should end up containing
# just elf libraries.
#
LIBDIRS=/usr/lib /usr/lib/compat /usr/local/lib /usr/X11R6/lib

#
# Go through the list of library directories from ldconfig and add any
# directory that doesn't contain an aout path component to the list of
# library directories to search.
#
.for _lib in ${CUSTOM_LIBDIRS}
_lib1=${_lib:S/\/aout//}
.if ${_lib1} == ${_lib}
.if ${LIBDIRS:R:M${_lib:R}} == ""
LIBDIRS+=${_lib}
.endif
.endif
.endfor

#
# Go through the list of library directories and prepare a list of
# aout directories.
#
AOUTLIBDIRS=
.for _lib in ${LIBDIRS}
AOUTLIBDIRS+=${_lib}/aout
.endfor

#
# Move the aout libraries into an aout sub-directory of each elf library
# directory.
#
${MAKEOBJDIRPREFIX}/do_move_aout_libs move-aout-libs :
.if !defined(NOCONFIRM)
	@echo
	@echo "--------------------------------------------------------------"
	@echo " You are about to move all the installed a.out libraries into"
	@echo " an aout sub-directory of each elf library directory. You can"
	@echo " type Ctrl-C to abort now or press return to start the moving"
	@echo " the libraries."
	@echo "--------------------------------------------------------------"
	@echo Directories to search: ${LIBDIRS}
	@/bin/sh -c "read -p \"Return to continue or Ctrl-C to abort: \" _e"
	@sh ${.CURDIR}/tools/tools/upgrade/move_aout_libs.sh ${LIBDIRS}
.else
	@NOCONFIRM=1 sh ${.CURDIR}/tools/tools/upgrade/move_aout_libs.sh ${LIBDIRS}
.endif
	@ldconfig ${AOUTLIBDIRS}
	@touch ${MAKEOBJDIRPREFIX}/do_move_aout_libs

#
# Before installing the aout world, allow for the possibility that the
# world about to be installed has some different syscalls to the installed
# kernel which will make shutting the system down problematic. We set aside
# copies of certain programs which match the running kernel.
#
# Install the aout world so that anything that isn't replaced by the
# elf world will be updated.
#
${MAKEOBJDIRPREFIX}/do_aout_installworld :
.if !defined(NOCONFIRM)
	@echo
	@echo "--------------------------------------------------------------"
	@echo " You are about to update the installed system (or the system"
	@echo " that your DESTDIR points to). You can type Ctrl-C to abort"
	@echo " now or press return to start the first phase of the update."
	@echo "--------------------------------------------------------------"
	@/bin/sh -c "read -p \"Return to continue or Ctrl-C to abort: \" _e"
.endif
.if	${INSTALLEDVERSION} < 300003
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Saving a copy of programs required to shut the system down"
	@echo "--------------------------------------------------------------"
	@cp /bin/sh ${MAKEOBJDIRPREFIX}
	@cp /sbin/reboot ${MAKEOBJDIRPREFIX}
.endif
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Doing an aout installworld using the aout tools in the aout"
	@echo " obj tree."
	@echo "--------------------------------------------------------------"
	@cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/aout \
		PATH=${AOUTTMPPATH} OBJFORMAT=aout NOTOOLS=1 \
		TOOLROOT=${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp \
		make -f Makefile.inc1 -m ${.CURDIR}/share/mk installworld
	@touch ${MAKEOBJDIRPREFIX}/do_aout_installworld

#
# The installed kernel may not match the world that is installed, so build
# a generic kernel, but don't install it. The user can decide if the kernel
# needs to be installed. Perhaps we should install it in the root
# directory as an obscure name just in case a reboot is required?
#
${MAKEOBJDIRPREFIX}/do_aout_kernel :
.if	${INSTALLEDVERSION} >= 300003
	@echo
	@echo "--------------------------------------------------------------"
	@echo " You are already running 3.0, so a kernel build"
	@echo " is probably not required."
	@echo "--------------------------------------------------------------"
.else
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Building a generic kernel using the new aout tools"
	@echo "--------------------------------------------------------------"
.if	exists(${.CURDIR}/sys/compile/GENERICupgrade)
	@rm -rf ${.CURDIR}/sys/compile/GENERICupgrade
.endif
.if	!exists(${.CURDIR}/sys/${MACHINE}/conf/GENERICupgrade)
	-cp ${.CURDIR}/sys/${MACHINE}/conf/GENERIC \
		${.CURDIR}/sys/${MACHINE}/conf/GENERICupgrade
.endif
	@cd ${.CURDIR}/sys/${MACHINE}/conf; config GENERICupgrade
	@-cd ${.CURDIR}/sys/compile/GENERICupgrade; \
		OBJFORMAT=aout make KERNFORMAT=aout depend && \
		OBJFORMAT=aout make KERNFORMAT=aout all
	@cd ${.CURDIR}/sys/compile/GENERICupgrade; \
		OBJFORMAT=aout make KERNFORMAT=aout depend && \
		OBJFORMAT=aout make KERNFORMAT=aout all
.endif
	@touch ${MAKEOBJDIRPREFIX}/do_aout_kernel

#
# Install the elf world overwriting just about all the previously installed
# aout world. Any aout things that need to be kept have already been
# installed in different places (typically in aout subdirectories).
#
${MAKEOBJDIRPREFIX}/do_elf_installworld :
.if !defined(NOCONFIRM)
	@echo
	@echo "--------------------------------------------------------------"
	@echo " You are about to update the installed system (or the system"
	@echo " that your DESTDIR points to) with the elf versions of"
	@echo " everything, replacing the aout versions. You can type Ctrl-C"
	@echo " to abort now, leaving just the aout world installed, or"
	@echo " press return to start the second phase of the update."
	@echo "--------------------------------------------------------------"
	@/bin/sh -c "read -p \"Return to continue or Ctrl-C to abort: \" _e"
.endif
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Doing an elf installworld using the aout tools in the aout"
	@echo " obj tree."
	@echo "--------------------------------------------------------------"
	@cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/elf \
		PATH=${AOUTTMPPATH} OBJFORMAT=elf NOTOOLS=1 \
		TOOLROOT=${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp \
		make -f Makefile.inc1 -m ${.CURDIR}/share/mk installworld
	@touch ${MAKEOBJDIRPREFIX}/do_elf_installworld

#
# Now that the elf world has been installed, we can set the default
# object format to elf.
#
${MAKEOBJDIRPREFIX}/do_set_objformat	:
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Setting the default object format to elf"
	@echo "--------------------------------------------------------------"
	@echo "OBJFORMAT=elf" > ${DESTDIR}/etc/objformat
	@touch ${MAKEOBJDIRPREFIX}/do_set_objformat

#
# If not already running a current kernel, install the GENERICupgrade kernel
# and reboot.
#
${MAKEOBJDIRPREFIX}/do_install_kernel_reboot	:
.if	${INSTALLEDVERSION} >= 300003
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Your system has been updated to run elf by default!"
	@echo
	@echo " You should reboot your system now."
	@echo "--------------------------------------------------------------"
	@touch ${MAKEOBJDIRPREFIX}/do_install_kernel_reboot
.else
.if !defined(NOCONFIRM)
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Your system has been updated to run elf by default!"
	@echo
	@echo " Since you are running ${INSTALLEDNAME}, the kernel must"
	@echo " be installed before the system is rebooted. You can type"
	@echo " Ctrl-C to abort the kernel installation (at your own risk),"
	@echo " or press return for the kernel to be installed and the"
	@echo " system rebooted."
	@echo "--------------------------------------------------------------"
	@${MAKEOBJDIRPREFIX}/sh -c "read -p \"Return to continue or Ctrl-C to abort: \" _e"
.endif
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Installing a new GENERICupgrade kernel"
	@echo "--------------------------------------------------------------"
	@cd ${.CURDIR}/sys/compile/GENERICupgrade; make install
	@echo
	@echo "--------------------------------------------------------------"
	@echo " Rebooting......."
	@echo "--------------------------------------------------------------"
	@touch ${MAKEOBJDIRPREFIX}/do_install_kernel_reboot
	@-${MAKEOBJDIRPREFIX}/reboot
.endif