# # (C) Copyright 1992, ..., 2004 the "DOSEMU-Development-Team". # # for details see file COPYING in the DOSEMU distribution # # Makefile for Linux DOSEMU # # You should do a "make" to compile and a "make install" as root to # install DOSEMU. TMP = $(abs_top_builddir)/tmp SYS = ../commands dosemudir = $(datadir)/dosemu NET=dosext/net/net # # This is defined when the SB Emulation is required. You should re-configure, # rather than just change this. # ifdef USE_SBEMU SBEMU=dosext/sound arch/linux/dosext/sound MIDID=arch/linux/dosext/sound/midid endif # # This is defined when the CPU emulator is required. You should # re-configure, rather than just change this. # ifdef X86_EMULATOR XCPUEMU=emu-i386/simx86 endif REQUIRED += $(MIDID) LIBSUBDIRS=env/video base base/async \ arch/linux/async arch/linux/mapping \ base/misc base/dev/misc\ emu-i386 $(XCPUEMU) env base/speaker \ base/dev/pic dosext/dpmi dosext/mfs dosext/misc\ base/init base/serial base/mouse\ base/dev/dma \ $(DEBUGGER) $(NET) $(IPX) $(SBEMU) dosext/drivers base/bios \ $(PLUGINSUBDIRS) # call all libraries the name of the directory LIBS_ := $(subst /,_,$(LIBSUBDIRS)) DOCS= $(REALTOPDIR)/man ################################################################### LIBPATH=lib default: version include/confpath.h doslib \ ../etc/xtermdos ../etc/xinstallvgafont ../etc/xtermdos: $(REALTOPDIR)/etc/xtermdos.sh @echo "#!/bin/sh" > ../etc/xtermdos @echo >> ../etc/xtermdos @echo X11ROOTDIR=$(X11ROOTDIR) >> ../etc/xtermdos @echo >> ../etc/xtermdos @cat $(REALTOPDIR)/etc/xtermdos.sh >> ../etc/xtermdos ../etc/xinstallvgafont: $(REALTOPDIR)/etc/xinstallvgafont.sh @echo "#!/bin/sh" > ../etc/xinstallvgafont @echo >> ../etc/xinstallvgafont @echo X11ROOTDIR=$(X11ROOTDIR) >> ../etc/xinstallvgafont @echo >> ../etc/xinstallvgafont @cat $(REALTOPDIR)/etc/xinstallvgafont.sh >> ../etc/xinstallvgafont emu.o: emu.c $(BINPATH)/bin/$(DOSBIN): emu.o ${addsuffix .a,${addprefix lib/lib,$(LIBS_)}} $(LD) $(LDFLAGS) -o $@ emu.o $(addprefix -L,$(LIBPATH)) \ -Wl,--whole-archive $(addprefix -l, $(LIBS_)) -Wl,--no-whole-archive $(LIBS) @nm $(BINPATH)/bin/$(DOSBIN) | grep -v '\(compiled\)\|\(\.o$$\)\|\( a \)' | \ sort > $(BINPATH)/bin/dosemu.map @ln -sf $(DOSBIN) $(BINPATH)/bin/dos ifdef X_SUPPORT @ln -sf $(DOSBIN) $(BINPATH)/bin/xdos endif $(BINPATH)/bin/dosemu: $(REALTOPDIR)/dist/dosemu sed -e "s|SYSTEM_INSTALL_PATH=NOT_SYSTEM_WIDE|SYSTEM_INSTALL_PATH=$(dosemudir)|" \ -e "s|SYSTEM_CONF_PATH=NOT_SYSTEM_WIDE|SYSTEM_CONF_PATH=$(sysconfdir)|" \ -e "s|SYSTEM_XFONTS_PATH=NOT_SYSTEM_WIDE|SYSTEM_XFONTS_PATH=$(x11fontdir)|" \ -e "s|SYSTEM_BIN_PATH=NOT_SYSTEM_WIDE|SYSTEM_BIN_PATH=$(bindir)|" \ $(REALTOPDIR)/dist/dosemu > $(BINPATH)/bin/dosemu chmod +x $(BINPATH)/bin/dosemu bin: $(BINPATH)/bin/$(DOSBIN) $(BINPATH)/bin/dosemu # This recursive call seems to be necessary to deal with parallel makes. # Otherwise the rule for $(DOSBIN) would depend on a phony target, and # this does not seem to be supported by GNU Make. dosemu: $(LIBSUBDIRS) @$(MAKE) bin DIRLIST=$(REQUIRED) $(DOCS) $(LIBSUBDIRS) $(OPTIONALSUBDIRS) .PHONY: dossubdirs optionalsubdirs docsubdirs dosemu bin .PHONY: $(DIRLIST) optionalsubdirs: $(OPTIONALSUBDIRS) docsubdirs: $(DOCS) $(DIRLIST): @($(MAKE) SUBDIR:=$@ -C $@) version: versetup versetup: @mkdir -p lib @mkdir -p $(BINPATH)/bin @mkdir -p $(BINPATH)/commands @cp -p commands/precompiled/*.{com,exe} $(BINPATH)/commands 2> /dev/null || true @rm -f ../bin ../commands @ln -sf $(THISVERSION)/bin ../bin @ln -sf $(THISVERSION)/commands ../commands include/confpath.h: ../Makefile.conf echo '#define ALTERNATE_ETC "$(sysconfdir)"' > $@ echo '#define DOSEMULIB_DEFAULT "$(dosemudir)"' >> $@ echo '#define DOSEMUHDIMAGE_DEFAULT "$(syshdimagedir)"' >> $@ doslib: $(REQUIRED) dosemu @echo "" @echo "---------------------------------DONE compiling-------------------------------" @echo "" @echo " Now you must install DOSEMU. Make sure you are root and:" @echo " make install" @echo "" @echo "" installnew: doslib $(MAKE) install install: rm -rf ../tmp mkdir -p -m 0755 $(TMP)/dosemu/freedos/dosemu $(INSTALL) -d $(DESTDIR)$(dosemudir) for i in `find $(SYS)/* -type f`; do \ $(INSTALL) -m 0644 $$i $(TMP)/dosemu/freedos/dosemu; \ done cd $(SYS); for i in `find * -type l`; do \ ln -sf generic.com $(TMP)/dosemu/freedos/dosemu/$$i; \ done cp -a $(TMP)/dosemu/freedos $(DESTDIR)$(dosemudir) rm -f $(DESTDIR)$(dosemudir)/commands ln -sf freedos/dosemu $(DESTDIR)$(dosemudir)/commands cd $(TMP)/dosemu; \ for i in `find freedos -type f` ; do \ ln -snf $(dosemudir)/$$i $$i; \ done tar -cf- -C $(TMP) dosemu/freedos | gzip -9 > $(TMP)/dosemu/dosemu-bin.tgz $(INSTALL) -m 0644 $(TMP)/dosemu/dosemu-bin.tgz $(DESTDIR)$(dosemudir) rm -rf ../tmp mkdir -p -m 0755 $(TMP)/dosemu/freedos/dosemu cd $(REALTOPDIR); if [ -f $(fdtarball) ]; then \ tar -C $(DESTDIR)$(dosemudir)/.. --no-same-owner -xpzf $(fdtarball); \ tar -C $(TMP) --no-same-owner -xpzf $(fdtarball); \ cd $(TMP)/dosemu; \ rm -f FDchange.log $(DESTDIR)$(dosemudir)/FDchange.log; \ rm -f README.bindist $(DESTDIR)$(dosemudir)/README.bindist; \ for i in `find freedos -type f | grep -v autoexec.bat | grep -v config.sys` ; do \ ln -snf $(dosemudir)/$$i $$i; \ done; \ $(INSTALL) $(DESTDIR)$(dosemudir)/freedos/config.sys freedos; \ $(INSTALL) $(DESTDIR)$(dosemudir)/freedos/autoexec.bat freedos; \ cd .. ; tar -cf- dosemu |gzip -9 >$(DESTDIR)$(dosemudir)/dosemu-freedos-bin.tgz; \ if [ ! -d $(DESTDIR)$(sysconfdir)/drives ]; then \ $(INSTALL) -d $(DESTDIR)$(sysconfdir)/drives; \ ln -s $(dosemudir)/freedos $(DESTDIR)$(sysconfdir)/drives/c; \ fi; \ rm -rf $(DESTDIR)$(dosemudir)/freedos/tmp; \ ln -sf /tmp $(DESTDIR)$(dosemudir)/freedos/tmp; \ fi $(INSTALL) -d $(DESTDIR)$(sysconfdir) if [ ! -f $(DESTDIR)$(sysconfdir)/dosemu.conf ]; then \ $(INSTALL) -m 0644 $(REALTOPDIR)/etc/dosemu.conf $(DESTDIR)$(sysconfdir); \ $(INSTALL) -m 0644 $(REALTOPDIR)/etc/dosemu.users.example $(DESTDIR)$(sysconfdir)/dosemu.users; \ $(INSTALL) -m 0644 $(REALTOPDIR)/etc/global.conf $(DESTDIR)$(sysconfdir); \ fi $(INSTALL) -d $(DESTDIR)$(dosemudir)/keymap for i in $(REALTOPDIR)/etc/keymap/*; do \ if [ -f $$i ]; then \ $(INSTALL) -m 0644 $$i $(DESTDIR)$(dosemudir)/keymap; \ fi; \ done $(INSTALL) -d $(DESTDIR)$(bindir) $(INSTALL) -m 0755 ../bin/$(DOSBIN) $(DESTDIR)$(bindir) $(INSTALL) -m 0755 ../bin/dosemu $(DESTDIR)$(bindir) $(INSTALL) -m 0755 ../bin/mkfatimage $(DESTDIR)$(bindir) $(INSTALL) -m 0755 ../bin/mkfatimage16 $(DESTDIR)$(bindir) ifdef USE_SBEMU $(INSTALL) -m 0755 ../bin/midid $(DESTDIR)$(bindir) endif ifdef USE_MHPDBG $(INSTALL) -m 0755 ../bin/dosdebug $(DESTDIR)$(bindir) endif $(INSTALL) -d $(DESTDIR)$(docdir) $(INSTALL) -m 0644 $(REALTOPDIR)/{README.bindist,NEWS,THANKS} $(DESTDIR)$(docdir) $(INSTALL) -m 0644 $(REALTOPDIR)/doc/{README,README-tech,dosemu-HOWTO,sound-usage}.txt \ $(REALTOPDIR)/doc/announce $(DESTDIR)$(docdir) $(INSTALL) -m 0644 $(REALTOPDIR)/doc/{DANG,EMUfailure,NOVELL-HOWTO}.txt \ $(REALTOPDIR)/doc/README.gdb $(DESTDIR)$(docdir) ifdef X_SUPPORT if [ ! -e $(DESTDIR)$(bindir)/xdosemu ]; then ln -s dosemu $(DESTDIR)$(bindir)/xdosemu; fi $(INSTALL) -d $(DESTDIR)$(x11fontdir) if [ -w $(DESTDIR)$(x11fontdir) ] && \ [ ! -e $(DESTDIR)$(x11fontdir)/vga.pcf ] && \ [ ! -e $(DESTDIR)$(x11fontdir)/vga.pcf.Z ] && \ [ ! -e $(DESTDIR)$(x11fontdir)/vga.pcf.gz ]; then \ echo "-> Main DOSEMU files installation done. Installing the X PC fonts..."; \ bdftopcf $(REALTOPDIR)/etc/vga.bdf | gzip -c -9 > $(DESTDIR)$(x11fontdir)/vga.pcf.gz; \ bdftopcf $(REALTOPDIR)/etc/vga11x19.bdf | gzip -c -9 > $(DESTDIR)$(x11fontdir)/vga11x19.pcf.gz; \ bdftopcf $(REALTOPDIR)/etc/vga-cp866.bdf | gzip -c -9 > $(DESTDIR)$(x11fontdir)/vga-cp866.pcf.gz; \ bdftopcf $(REALTOPDIR)/etc/vga10x20-cp866.bdf | gzip -c -9 > $(DESTDIR)$(x11fontdir)/vga10x20-cp866.pcf.gz; \ chmod 0644 $(DESTDIR)$(x11fontdir)/vga11x19.pcf.gz $(DESTDIR)$(x11fontdir)/vga-cp866.pcf.gz \ $(DESTDIR)$(x11fontdir)/vga10x20-cp866.pcf.gz; \ if [ ! -f $(DESTDIR)$(x11fontdir)/fonts.alias ]; then \ $(INSTALL) -m 0644 $(REALTOPDIR)/etc/dosemu.alias $(DESTDIR)$(x11fontdir)/fonts.alias; \ elif [ grep ^vga $(DESTDIR)$(x11fontdir)/fonts.alias ]; then \ cat $(REALTOPDIR)/etc/dosemu.alias >> $(DESTDIR)$(x11fontdir)/fonts.alias; \ fi; \ cd $(DESTDIR)$(x11fontdir); \ mkfontdir; \ fi; endif /bin/rm -rf ../tmp $(MAKE) -C ../man install @cd $(REALTOPDIR); if test $(fdtarball) != none -a ! -f $(fdtarball); then \ echo ; \ echo WARNING ;\ echo No FreeDOS tarball \($(fdtarball)\) found. If you are not ;\ echo upgrading a working existing installation then please download one ;\ echo from http://www.dosemu.org and re-run "make install".; \ echo You can also use this procedure to upgrade an existing *FreeDOS*; \ echo installation when a new tarball is available.; \ echo Alternatively you can set fdtarball to none in compiletime-settings; \ echo and use another DOS, which can be installed using dosemu -install,; \ echo referred to using \$$_hdimage in $(sysconfdir)/dosemu.conf or \~/.dosemurc; \ echo or symbolically linked from \~/.dosemu/drives/c.; \ fi @if test $(sysconfdir) != /etc; then \ if [ -f $(DESTDIR)/etc/dosemu.users ]; then \ echo ; \ echo /etc/dosemu.users exists but you did not set sysconfdir=/etc; \ echo Deprecated: moving to /etc/dosemu/dosemu.users; \ echo mv /etc/dosemu.users /etc/dosemu/dosemu.users; \ mv /etc/dosemu.users /etc/dosemu/dosemu.users; \ fi; \ if [ -f $(DESTDIR)/etc/dosemu.conf ]; then \ echo ; \ echo /etc/dosemu.conf exists but you did not set sysconfdir=/etc; \ echo Deprecated: moving to /etc/dosemu/dosemu.conf; \ echo mv /etc/dosemu.conf /etc/dosemu/dosemu.conf; \ mv /etc/dosemu.conf /etc/dosemu/dosemu.conf; \ fi \ fi @echo ""; \ echo "---------------------------------DONE Installing-------------------------------"; \ echo ""; \ echo " - You can type 'dosemu' to run DOSEMU. If you installed the FreeDOS tarball"; \ echo " too (see the warning above), then DOSEMU will set up a directory structure"; \ echo " in your home directory when you run it for the first time." ifdef X_SUPPORT @echo " - Use 'xdosemu' instead of 'dosemu' to cause DOSEMU to open its own Xwindow."; \ echo " - An icon for use with your favourite window manager is at"; \ echo " $(REALTOPDIR)/etc/dosemu.xpm" endif @echo " - Try emumouse.exe -r if your INTERNAL mouse won't work"; \ echo " - Try unix.exe to run a Unix command under DOSEMU"; \ echo -e "\n NOTE: DOSEMU is no longer installed suid-root by default!"; \ echo "Please see the README and INSTALL files for additional information."; \ echo "" converthd: hdimage mv hdimage hdimage.preconvert periph/mkhdimage -h 4 -s 17 -c 40 | cat - hdimage.preconvert > hdimage @echo "Your hdimage is now converted and ready to use with 0.52 and above!" newhd: tools/periph/bootsect tools/periph/mkhdimage -h 4 -s 17 -c 40 | cat - tools/periph/bootsect > newhd @echo "You now have a hdimage file called 'newhd'" local_clean: -rm -f $(BINPATH)/bin/$(DOSBIN) $(BINPATH)/bin/xdos \ $(BINPATH)/bin/dos $(BINPATH)/bin/libdosemu *.s core \ *.tmp $(BINPATH)/bin/dosemu.map *.o $(BINPATH)/bin/dosdebug local_realclean: -rm -f tools/tools86 clean:: local_clean realclean:: local_realclean local_clean CLEANDIRS=$(addsuffix .clean, $(DIRLIST)) REALCLEANDIRS=$(addsuffix .realclean, $(DIRLIST)) clean:: $(CLEANDIRS) realclean:: $(REALCLEANDIRS) .PHONY: $(CLEANDIRS) $(CLEANDIRS): -@$(MAKE) -C $(subst .clean,,$@) clean CLEANING=true .PHONY: $(REALCLEANDIRS) $(REALCLEANDIRS): -@$(MAKE) -C $(subst .realclean,,$@) realclean CLEANING=true pristine: realclean -rm -rf lib -rm -rf $(BINPATH) ../bin ../commands ../etc/xtermdos ../etc/xinstallvgafont -rm -rf ../testboot