# # Makefile for Zaptel driver modules and utilities # # Copyright (C) 2001-2006 Digium, Inc. # # .EXPORT_ALL_VARIABLES: .PHONY: menuselect distclean dist-clean clean version.h all _all install b410p devices programs modules linux24 linux26 xpp tests devel data stackcheck install-udev config update install-programs install-modules install-linux24 install-linux26 firmware install-include install-libs xpp-install xpp-utils PWD=$(shell pwd) ifeq ($(DEB_HOST_GNU_TYPE),) UNAME_M:=$(shell uname -m) else UNAME_M:=$(DEB_HOST_GNU_TYPE) endif # If you want to build for a kernel other than the current kernel, set KVERS ifndef KVERS KVERS:=$(shell uname -r) endif ifndef KSRC ifneq (,$(wildcard /lib/modules/$(KVERS)/build)) KSRC:=/lib/modules/$(KVERS)/build else KSRC_SEARCH_PATH:=/usr/src/linux-2.4 /usr/src/linux KSRC:=$(shell for dir in $(KSRC_SEARCH_PATH); do if [ -d $$dir ]; then echo $$dir; break; fi; done) endif endif KVERS_MAJ:=$(shell echo $(KVERS) | cut -d. -f1-2) KINCLUDES:=$(KSRC)/include CFLAGS+=-I. -O4 -g -fPIC -Wall -DBUILDING_TONEZONE #-DTONEZONE_DRIVER ifneq (,$(findstring ppc,$(UNAME_M))) CFLAGS_PPC:=-fsigned-char endif ifneq (,$(findstring x86_64,$(UNAME_M))) CFLAGS_x86_64:=-m64 endif CFLAGS+=$(CFLAGS_PPC) $(CFLAGS_x86_64) KFLAGS=-I$(KINCLUDES) -O6 KFLAGS+=-DMODULE -D__KERNEL__ -DEXPORT_SYMTAB -I$(KSRC)/drivers/net \ -Wall -I. -Wstrict-prototypes -fomit-frame-pointer -I$(KSRC)/drivers/net/wan -I$(KINCLUDES)/net ifneq (,$(wildcard $(KINCLUDES)/linux/modversions.h)) KFLAGS+=-DMODVERSIONS -include $(KINCLUDES)/linux/modversions.h endif ifneq (,$(findstring ppc,$(UNAME_M))) KFLAGS_PPC:=-msoft-float -fsigned-char endif KFLAGS+=$(KFLAGS_PPC) ifeq ($(KVERS_MAJ),2.4) ifneq (,$(findstring x86_64,$(UNAME_M))) KFLAGS+=-mcmodel=kernel endif endif # # Features are now configured in zconfig.h # KFLAGS+=-DSTANDALONE_ZAPATA CFLAGS+=-DSTANDALONE_ZAPATA KMAKE = $(MAKE) -C $(KSRC) SUBDIRS=$(PWD) KMAKE_INST = $(KMAKE) \ INSTALL_MOD_PATH=$(INSTALL_PREFIX) INSTALL_MOD_DIR=misc modules_install ROOT_PREFIX= INSTALL_PREFIX=$(DESTDIR) CONFIG_FILE=$(INSTALL_PREFIX)/etc/zaptel.conf CFLAGS+=-DZAPTEL_CONFIG=\"$(CONFIG_FILE)\" ifeq ($(KVERS_MAJ),2.4) BUILDVER:=linux24 else BUILDVER:=linux26 endif # This is not related to the version that we build. Rather, to the # version that we runs. If we build for 2.4 using 2.4 headers on a 2.6 # system with udev mounted on /dev , no point in installing files to /dev # because they'll be wiped at next reboot. DYNFS:=$(shell ps ax | grep -v grep | grep -qw 'devfsd\|udevd' && echo "yes") # Check for udev rules directories ifneq (,$(wildcard $(ROOT_PREFIX)/etc/udev/rules.d)) UDEVRULES=yes endif ifneq ($(wildcard .version),) ZAPTELVERSION:=$(shell cat .version) else ifneq ($(wildcard .svn),) ZAPTELVERSION=SVN-$(shell build_tools/make_svn_branch_name) endif endif LTZ_A:=libtonezone.a LTZ_A_OBJS:=zonedata.o tonezone.o LTZ_SO:=libtonezone.so LTZ_SO_OBJS:=zonedata.lo tonezone.lo LTZ_SO_MAJOR_VER:=1 LTZ_SO_MINOR_VER:=0 # If the file .zaptel.makeopts is present in your home directory, you can # include all of your favorite menuselect options so that every time you download # a new version of Asterisk, you don't have to run menuselect to set them. # The file /etc/zaptel.makeopts will also be included but can be overridden # by the file in your home directory. GLOBAL_MAKEOPTS=$(wildcard /etc/zaptel.makeopts) USER_MAKEOPTS=$(wildcard ~/.zaptel.makeopts) ifeq ($(strip $(foreach var,clean distclean dist-clean update,$(findstring $(var),$(MAKECMDGOALS)))),) ifneq ($(wildcard menuselect.makeopts),) include menuselect.makeopts endif endif ifeq ($(strip $(foreach var,clean distclean dist-clean update,$(findstring $(var),$(MAKECMDGOALS)))),) ifneq ($(wildcard makeopts),) include makeopts endif endif MODULES:=pciradio tor2 torisa wcfxo wct1xxp wctdm wcte11xp wcusb zaptel ztd-eth ztd-loc ztdummy ztdynamic zttranscode MODULES:=$(filter-out $(MENUSELECT_MODULES),$(MODULES)) MODULE_ALIASES=wcfxs wctdm8xxp wct2xxp MODULESO:=$(MODULES:%=%.o) MODULESKO:=$(MODULES:%=%.ko) ifeq ($(BUILDVER),linux26) HOTPLUG_FIRMWARE:=$(shell if grep CONFIG_FW_LOADER $(KINCLUDES)/linux/autoconf.h | grep -q undef; then echo "no"; else echo "yes"; fi) else HOTPLUG_FIRMWARE:=no endif BIN_DIR:=$(INSTALL_PREFIX)/sbin LIB_DIR:=$(INSTALL_PREFIX)/usr/lib INC_DIR:=$(INSTALL_PREFIX)/usr/include MOD_DIR:=$(INSTALL_PREFIX)/lib/modules/$(KVERS)/misc MOD_DESTDIR:=zaptel obj-m:=$(MODULESO) ifeq ($(findstring wct4xxp,$(MENUSELECT_MODULES)),) obj-m+=wct4xxp/ MODULES+=wct4xxp endif ifeq ($(findstring ztcodec_dte,$(MENUSELECT_MODULES)),) obj-m+=ztcodec_dte/ MODULES+=ztcodec_dte endif ifeq ($(findstring xpp_usb,$(MENUSELECT_MODULES)),) obj-m+=xpp/ MODULES+=xpp endif ifeq ($(findstring wctdm24xxp,$(MENUSELECT_MODULES)),) obj-m+=wctdm24xxp/ MODULES+=wctdm24xxp endif # Set this to override hotplug firmware loading and revert to classic header #HOTPLUG_FIRMWARE=no ifeq ($(HOTPLUG_FIRMWARE),yes) CFLAGS+=-DHOTPLUG_FIRMWARE endif BINS:=fxotune fxstest sethdlc-new ztcfg ztdiag ztmonitor ztspeed zttest zttool UTILS:=$(filter-out zttool fxstest ztcfg,$(BINS)) UTILSO:=$(UTILS:%=%.o) BINS:=$(filter-out $(MENUSELECT_UTILS),$(BINS)) all: menuselect.makeopts @$(MAKE) _all _all: $(if $(MODULES),modules) programs $(LTZ_SO) $(LTZ_A) broken xpp-utils: ifeq (yes,$(BUILD_XPP)) @$(MAKE) -C xpp/utils endif programs: $(BINS) xpp-utils modules: $(BUILDVER) linux24: prereq $(MODULESO) wct4xxp/wct4xxp.o linux26: prereq @if [ -z "$(KSRC)" -o ! -d "$(KSRC)" ]; then echo "You do not appear to have the sources for the $(KVERS) kernel installed."; exit 1 ; fi $(MAKE) -C $(KSRC) SUBDIRS=$(PWD) HOTPLUG_FIRMWARE=$(HOTPLUG_FIRMWARE) modules xpp: linux26 version.h: @ZAPTELVERSION="${ZAPTELVERSION}" build_tools/make_version_h > $@.tmp @if cmp -s $@.tmp $@ ; then :; else \ mv $@.tmp $@ ; \ fi @rm -f $@.tmp wct4xxp/wct4xxp.o: $(MAKE) -C wct4xxp KFLAGS="$(KFLAGS) -I.." CFLAGS="$(CFLAGS) -I.." ztcodec_dte/ztcodec_dte.o: $(MAKE) -C ztcodec_dte KFLAGS="$(KFLAGS) -I.." CFLAGS="$(CFLAGS) -I.." devel: tor2ee tests: patgen pattest patlooptest hdlcstress hdlctest hdlcgen hdlcverify timertest tor2.o: tor2-hw.h tor2fw.h zaptel.o: digits.h arith.h sec.h mec.h sec-2.h mec2.h mec3.h zconfig.h wcusb.o: wcusb.h wcfxsusb.o: wcfxsusb.h wctdm.o: wctdm.h pciradio.o: radfw.h ztdummy.o: ztdummy.h $(MODULESO): %.o: %.c zaptel.h $(CC) $(KFLAGS) -o $@ -c $< tor2ee.o: tor2-hw.h tor2ee: LDLIBS+=-lpci zonedata.lo: zonedata.c $(CC) -c $(CFLAGS) -o $@ $^ tonezone.lo: tonezone.c $(CC) -c $(CFLAGS) -o $@ $^ torisatool: torisatool.o $(CC) -o $@ $^ tones.h: gendigits ./gendigits > $@ tor2fw.h: tormenta2.rbt makefw ./makefw $< tor2fw > $@ radfw.h: pciradio.rbt makefw ./makefw $< radfw > $@ makefw: makefw.c $(HOSTCC) -o $@ $^ gendigits: gendigits.c $(HOSTCC) -o $@ $^ -lm zaptel.c: tones.h prereq: config.status tones.h tor2fw.h radfw.h version.h zttool.o: zttool.c zaptel.h $(CC) -g -c $(NEWT_INCLUDE) $(CFLAGS) -o $@ $< ztprovision.o: ztprovision.c zaptel.h ztmonitor.o: ztmonitor.c zaptel.h ztspeed: CFLAGS= ztspeed.o: CFLAGS= zttool: LDLIBS+=$(NEWT_LIB) sethdlc-new.o: CFLAGS+=-I$(KINCLUDES) $(LTZ_A): $(LTZ_A_OBJS) ar rcs $@ $^ ranlib $@ $(LTZ_SO): $(LTZ_SO_OBJS) $(CC) -shared -Wl,-soname,$(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) -o $@ $^ -lm ztcfg.c: ztcfg.h ztcfg-shared: ztcfg.o $(LTZ_SO) $(CC) -o $@ $^ -lm data: $(MAKE) -C datamods datamods ztcfg: ztcfg.o $(LTZ_A) $(CC) -o $@ $^ -lm ztcfg-dude: ztcfg-dude.o mknotch.o complex.o $(LTZ_SO) $(CC) -o $@ $^ -lm -lstdc++ mknotch.o: mknotch.cc $(CC) -o $@ -c $^ complex.o: complex.cc $(CC) -o $@ -c $^ usbfxstest: LDLIBS+=-lzap fxstest: $(LTZ_SO) fxstest: LDLIBS+=-lm fxotune: LDLIBS+=-lm fxsdump: LDLIBS+=-lm stackcheck: checkstack modules ./checkstack *.ko */*.ko README.html: README asciidoc -n -a toc $< xpp/README.html: xpp/README.Astribank cd $(@D); asciidoc -n -a toc $( $(INSTALL_PREFIX)/etc/udev/rules.d/zaptel.rules else # !UDEVRULES @echo "**** Dynamic filesystem detected -- not creating device nodes" endif endif hotplug-uninstall: $(MAKE) -C firmware hotplug-uninstall xpp-install: ifeq (yes,$(BUILD_XPP)) @$(MAKE) -C xpp/utils install endif install: all devices firmware install-libs install-include xpp-install broken ifeq ($(HOTPLUG_FIRMWARE),yes) $(MAKE) -C firmware hotplug-install endif if [ -f ztcfg ]; then \ $(INSTALL) -D -m 755 ztcfg $(INSTALL_PREFIX)/sbin/ztcfg; \ fi if [ -f sethdlc-new ]; then \ $(INSTALL) -D -m 755 sethdlc-new $(INSTALL_PREFIX)/sbin/sethdlc; \ elif [ -f sethdlc ]; then \ $(INSTALL) -D -m 755 sethdlc $(INSTALL_PREFIX)/sbin/sethdlc; \ fi if [ -f zttool ]; then \ $(INSTALL) -D -m 755 zttool $(INSTALL_PREFIX)/sbin/zttool; \ fi ifeq ($(BUILDVER),linux26) for x in $(MODULESKO); do \ rm -f $(INSTALL_PREFIX)/lib/modules/$(KVERS)/extra/$$x ; \ done; \ $(KMAKE_INST); \ if [ -f datamods/syncppp.ko ]; then \ $(MAKE) -C datamods install; \ else \ rm -f $(INSTALL_PREFIX)/lib/modules/$(KVERS)/misc/{hdlc_*,syncppp}.ko; \ fi else for x in $(MODULESO) wct4xxp/wct4xxp.o; do \ $(INSTALL) -D -m 644 $$x $(INSTALL_PREFIX)/lib/modules/$(KVERS)/misc/$$x ; \ done endif if ! [ -f wcfxsusb.o ]; then \ rm -f $(INSTALL_PREFIX)/lib/modules/$(KVERS)/misc/wcfxsusb.o; \ fi; \ rm -f $(INSTALL_PREFIX)/lib/modules/$(KVERS)/misc/wcfxs.o $(INSTALL) -m 644 doc/ztcfg.8 $(INSTALL_PREFIX)/usr/share/man/man8 $(INSTALL) -m 644 doc/zttool.8 $(INSTALL_PREFIX)/usr/share/man/man8 [ `id -u` = 0 ] && /sbin/depmod -a $(KVERS) || : [ -f $(CONFIG_FILE) ] || $(INSTALL) -D -m 644 zaptel.conf.sample $(CONFIG_FILE) install-libs: $(LTZ_SO) $(LTZ_A) $(INSTALL) -D -m 755 $(LTZ_A) $(LIB_DIR)/$(LTZ_A) $(INSTALL) -D -m 755 $(LTZ_SO) $(LIB_DIR)/$(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) if [ -z "$(INSTALL_PREFIX)" -a `id -u` = 0 ]; then \ /sbin/ldconfig || : ;\ fi rm -f $(LIB_DIR)$(LTZ_SO) $(LN) -sf $(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) \ $(LIB_DIR)/$(LTZ_SO).$(LTZ_SO_MAJOR_VER) $(LN) -sf $(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) \ $(LIB_DIR)/$(LTZ_SO) if [ -z "$(INSTALL_PREFIX)" ] && [ -x /usr/sbin/sestatus ] && (/usr/sbin/sestatus | grep "SELinux status:" | grep -q "enabled") ; then /sbin/restorecon -v $(LIB_DIR)/$(LTZ_SO); fi install-include: $(INSTALL) -D -m 644 zaptel.h $(INSTALL_PREFIX)/usr/include/zaptel/zaptel.h $(INSTALL) -D -m 644 tonezone.h $(INSTALL_PREFIX)/usr/include/zaptel/tonezone.h rm -f $(INSTALL_PREFIX)/usr/include/linux/zaptel.h rm -f $(INSTALL_PREFIX)/usr/include/linux/torisa.h rm -f $(INSTALL_PREFIX)/usr/include/zaptel.h rm -f $(INSTALL_PREFIX)/usr/include/torisa.h rm -f $(INSTALL_PREFIX)/usr/include/tonezone.h install-udev: devices config: if [ -d $(INSTALL_PREFIX)/etc/rc.d/init.d ]; then \ $(INSTALL) -D -m 755 zaptel.init $(INSTALL_PREFIX)/etc/rc.d/init.d/zaptel; \ if [ -z "$(INSTALL_PREFIX)" ]; then \ $(CHKCONFIG) --add zaptel; \ fi; \ elif [ -d $(INSTALL_PREFIX)/etc/init.d ]; then \ $(INSTALL) -D -m 755 zaptel.init $(INSTALL_PREFIX)/etc/init.d/zaptel; \ if [ -z "$(INSTALL_PREFIX)" ]; then \ $(CHKCONFIG) --add zaptel; \ fi; \ fi if [ -d $(INSTALL_PREFIX)/etc/default ] && [ ! -f $(INSTALL_PREFIX)/etc/default/zaptel ]; then \ $(INSTALL) -D -m 644 zaptel.sysconfig $(INSTALL_PREFIX)/etc/default/zaptel; \ fi if [ -d $(INSTALL_PREFIX)/etc/sysconfig ] && [ ! -f $(INSTALL_PREFIX)/etc/sysconfig/zaptel ]; then \ $(INSTALL) -D -m 644 zaptel.sysconfig $(INSTALL_PREFIX)/etc/sysconfig/zaptel; \ fi if [ -d $(INSTALL_PREFIX)/etc/sysconfig/network-scripts ]; then \ $(INSTALL) -D -m 755 ifup-hdlc $(INSTALL_PREFIX)/etc/sysconfig/network-scripts/ifup-hdlc; \ fi @$(MAKE) broken update: @if [ -d .svn ]; then \ echo "Updating from Subversion..." ; \ fromrev="`svn info | $(AWK) '/Revision: / {print $$2}'`"; \ svn update | tee update.out; \ torev="`svn info | $(AWK) '/Revision: / {print $$2}'`"; \ echo "`date` Updated from revision $${fromrev} to $${torev}." >> update.log; \ rm -f .version; \ if [ `grep -c ^C update.out` -gt 0 ]; then \ echo ; echo "The following files have conflicts:" ; \ grep ^C update.out | cut -b4- ; \ fi ; \ rm -f update.out; \ else \ echo "Not under version control"; \ fi @$(MAKE) broken # make should *fail* and not silently succeed if a program did not build install-programs: $(BINS) install-libs install-include $(INSTALL) -d $(BIN_DIR) $(INSTALL) $(BINS) $(BIN_DIR) uninstall: mv $(INSTALL_PREFIX)/etc/zaptel.conf $(INSTALL_PREFIX)/etc/zaptel.`date +%F` rm -rf $(INSTALL_PREFIX)/usr/share/zaptel rm -rf $(INSTALL_PREFIX)/usr/include/zaptel rm -f $(INSTALL_PREFIX)/sbin/ztcfg rm -f $(INSTALL_PREFIX)/sbin/sethdlc rm -f $(INSTALL_PREFIX)/sbin/zttool rm -f $(INSTALL_PREFIX)/etc/hotplug/usb/xpp* rm -f $(INSTALL_PREFIX)/etc/udev/rules.d/zaptel.rules rm -f $(INSTALL_PREFIX)/etc/udev/rules.d/xpp.rules rm -f $(INSTALL_PREFIX)/etc/udev/rules.d/zaptel.rules install-modules: install-$(BUILDVER) install-linux24: $(MODULESO) $(INSTALL) -d $(MOD_DIR) $(INSTALL) -m 644 $(MODULESO) $(MOD_DIR) install-linux26: $(MODULESKO) $(KMAKE_INST) clean: -@$(MAKE) -C menuselect clean rm -f torisatool makefw tor2fw.h radfw.h rm -f $(BINS) rm -f *.o ztcfg tzdriver sethdlc sethdlc-new rm -f $(LTZ_SO) $(LTZ_A) *.lo ifeq ($(BUILDVER),linux26) $(MAKE) -C $(KSRC) SUBDIRS=$(PWD) clean else $(MAKE) -C wct4xxp clean $(MAKE) -C ztcodec_dte clean $(MAKE) -C datamods clean endif $(MAKE) -C firmware clean -@$(MAKE) -C xpp/utils clean rm -f xpp/*.ko xpp/*.mod.c xpp/.*o.cmd rm -f xpp/*.o xpp/*.mod.o rm -rf .tmp_versions rm -f gendigits tones.h rm -f libtonezone* rm -f tor2ee rm -f fxotune rm -f core rm -f ztcfg-shared fxstest rm -rf misdn* rm -rf mISDNuser* rm -rf README.html xpp/README.html @$(MAKE) broken distclean: dist-clean dist-clean: clean @$(MAKE) -C menuselect dist-clean @$(MAKE) -C firmware dist-clean rm -f makeopts menuselect.makeopts menuselect-tree rm -f config.log config.status config.status: configure @CFLAGS="" ./configure @echo "****" @echo "**** The configure script was just executed, so 'make' needs to be" @echo "**** restarted." @echo "****" @exit 1 menuselect.makeopts: menuselect/menuselect menuselect-tree @menuselect/menuselect --check-deps ${GLOBAL_MAKEOPTS} ${USER_MAKEOPTS} $@ menuconfig: menuselect menuselect: menuselect/menuselect menuselect-tree -@menuselect/menuselect $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS) menuselect.makeopts && echo "menuselect changes saved!" || echo "menuselect changes NOT saved!" @$(MAKE) broken menuselect/menuselect: menuselect/menuselect.c menuselect/menuselect_curses.c menuselect/menuselect_stub.c menuselect/menuselect.h menuselect/linkedlists.h config.status @CFLAGS="" $(MAKE) -C menuselect menuselect-tree: zaptel.xml firmware/firmware.xml @echo "Generating input for menuselect ..." @build_tools/make_tree > $@ broken: @echo @echo "=== WARNING === WARNING === WARNING ===" @echo @echo "Zaptel trunk is currently not the development tree and may be seriously BROKEN." @echo "We encourage you to use Zaptel 1.4. Please do not report any bugs or issues in" @echo "Zaptel trunk, as they will be ignored and immediately closed." @echo "We will post a note to the asterisk-dev list when Zaptel trunk is once" @echo "again safe to use, but for the time being, use:" @echo @echo " http://svn.digium.com/svn/zaptel/branches/1.4/" @echo @echo "=== WARNING === WARNING === WARNING ===" @echo