Skip to content
Snippets Groups Projects
makefile 6.26 KiB
Newer Older
  • Learn to ignore specific revisions
  • oberion's avatar
    oberion committed
    #-- set this to the man directory you would like to use
    MANPATH:=/usr/share/man
    
    #-- uncomment this to enable debugging
    #DEBUG:=-g -DDEBUG
    
    
    ###### YOU SHOULD NOT CHANGE BELOW THIS LINE ######
    
    VERSION:=1.4.1
    SHELL:=/bin/bash
    SRCS:=api.c
    MANS:=man3/libxbee.3 \
          man3/xbee_con.3 \
          man3/xbee_end.3 \
          man3/xbee_endcon.3 \
          man3/xbee_flushcon.3 \
          man3/xbee_purgecon.3 \
          man3/xbee_getanalog.3 \
          man3/xbee_getdigital.3 \
          man3/xbee_getpacket.3 \
          man3/xbee_hasanalog.3 \
          man3/xbee_hasdigital.3 \
          man3/xbee_logit.3 \
          man3/xbee_newcon.3 \
          man3/xbee_nsenddata.3 \
          man3/xbee_pkt.3 \
          man3/xbee_senddata.3 \
          man3/xbee_setup.3 \
          man3/xbee_setupAPI.3 \
          man3/xbee_setuplog.3 \
          man3/xbee_setuplogAPI.3 \
          man3/xbee_vsenddata.3
    MANPATHS:=$(foreach dir,$(shell ls man -ln | grep ^d | tr -s ' ' | cut -d ' ' -f 9),${MANPATH}/$(dir))
    
    PDFS:=${SRCS} ${SRCS:.c=.h} makefile main.c xbee.h
    
    CC:=gcc
    CFLAGS:=-Wall -Wstrict-prototypes -Wno-variadic-macros -pedantic -c -fPIC ${DEBUG}
    CLINKS:=-lpthread -lrt ${DEBUG}
    DEFINES:=
    
    ifeq ($(strip $(wildcard ${MANPATH}/man3/libxbee.3.bz2)),)
    FIRSTTIME:=TRUE
    else
    FIRSTTIME:=FALSE
    endif
    
    ENSCRIPT:=-MA4 --color -f Courier8 -C --margins=15:15:0:20
    ifneq ($(strip $(wildcard /usr/share/enscript/mine-web.hdr)),)
      ENSCRIPT+= --fancy-header=mine-web
    else
      ENSCRIPT+= --fancy-header=a2ps
    endif
    
    SRCS:=${sort ${SRCS}}
    PDFS:=${sort ${PDFS}}
    
    .PHONY: FORCE
    .PHONY: all run new clean cleanpdfs main pdfs html
    .PHONY: install install_su install_man
    .PHONY: uninstall uninstall_su uninstall_man/
    
    
    # all - do everything (default) #
    all: ./lib/libxbee.so.$(VERSION)
    	@echo "*** Done! ***"
    
    
    # run - remake main and then run #
    run: all main
    	./bin/main
    
    
    # new - clean and do everything again #
    new: clean all
    
    
    # clean - remove any compiled files and PDFs #
    clean:
    	rm -f ./*~
    	rm -f ./sample/*~
    	rm -f ./obj/*.o
    	rm -f ./lib/libxbee.so*
    	rm -f ./bin/main
    
    cleanpdfs:
    	rm -f ./pdf/*.pdf
    
    
    # install - installs library #
    install: ./lib/libxbee.so.$(VERSION)
    	@echo
    	@echo
    ifneq ($(shell echo $$USER),root)
    	@echo "#######################################################################################"
    	@echo "### To Install this library I need the root password please!"
    	@echo "#######################################################################################"
    endif
    	su -c "make install_su --no-print-directory"
    	@echo
    ifeq (${FIRSTTIME},TRUE)
    	@echo "#######################################################################################"
    	@echo
    	@pr -h "" -o 3 -w 86 -tT ./README
    	@echo
    	@echo "#######################################################################################"
    endif
    
    install_su: /usr/lib/libxbee.so.$(VERSION) /usr/include/xbee.h install_man
    
    /usr/lib/libxbee.so.$(VERSION): ./lib/libxbee.so.$(VERSION)
    	cp ./lib/libxbee.so.$(VERSION) /usr/lib/libxbee.so.$(VERSION) -f
    	@chmod 755 /usr/lib/libxbee.so.$(VERSION)
    	@chown root:root /usr/lib/libxbee.so.$(VERSION)
    	ln ./libxbee.so.$(VERSION) /usr/lib/libxbee.so.1 -sf
    	@chown root:root /usr/lib/libxbee.so.1
    	ln ./libxbee.so.$(VERSION) /usr/lib/libxbee.so -sf
    	@chown root:root /usr/lib/libxbee.so
    
    /usr/include/xbee.h: ./xbee.h
    	cp ./xbee.h /usr/include/xbee.h -f
    	@chmod 644 /usr/include/xbee.h
    	@chown root:root /usr/include/xbee.h
    
    install_man: ${MANPATH} ${MANPATHS} ${addsuffix .bz2,${addprefix ${MANPATH}/,${MANS}}}
    
    ${MANPATH} ${MANPATHS}:
    	@echo "#######################################################################################"
    	@echo "### $@ does not exist... cannot install man files here!"
    	@echo "### Please check the directory and the MANPATH variable in the makefile"
    	@echo "#######################################################################################"
    	@false
    
    ${MANPATH}/%.bz2: ./man/%
    	@echo "cat $< | bzip2 -z > $@"
    	@cat $< | bzip2 -z > $@ || ( \
    	  echo "#######################################################################################"; \
    	  echo "### Installing man page '$*' to '$@' failed..."; \
    	  echo "#######################################################################################"; )
    	@chmod 644 $@
    	@chown root:root $@
    
    ./doc/:
    	mkdir ./doc/
    
    html: ./doc/ ./man/
    	cd ./doc/; mkdir -p `find ../man/ -type d -not -path *.svn* | cut -b 2-`;
    	find ./man/ -type f -not -path *.svn* | cut -d / -f 3- | sort > .html_todo
    	for item in `cat .html_todo`; do \
    	  man2html -r ./man/$$item | tail -n +3 > ./doc/man/$$item.html; \
    	  done 2> /dev/null
    	rm .html_todo
    
    uninstall:
    	@echo
    	@echo
    ifneq ($(shell echo $$USER),root)
    	@echo "#######################################################################################"
    	@echo "### To Uninstall this library I need the root password please!"
    	@echo "#######################################################################################"
    endif
    	su -c "make uninstall_su --no-print-directory"
    	@echo
    	@echo
    
    uninstall_su: ${addprefix uninstall_man/,${MANS}}
    	rm /usr/lib/libxbee.so.$(VERSION) -f
    	rm /usr/lib/libxbee.so.1 -f
    	rm /usr/lib/libxbee.so -f	
    	rm /usr/include/xbee.h -f
    
    uninstall_man/%:
    	rm ${MANPATH}/$*.bz2 -f
    
    # main - compile & link objects #
    main: ./bin/main
    
    ./bin/main: ./obj/api.o ./bin/ ./main.c
    	${CC} ${CLINKS} ./main.c ./obj/api.o -o ./bin/main ${DEBUG}
    
    ./bin/:
    	mkdir ./bin/
    
    ./lib/libxbee.so.$(VERSION): ./lib/ ${addprefix ./obj/,${SRCS:.c=.o}} ./xbee.h
    	gcc -shared -Wl,-soname,libxbee.so.1 $(CLINKS) -o ./lib/libxbee.so.$(VERSION) ./obj/*.o
    	ln ./libxbee.so.$(VERSION) ./lib/libxbee.so.1 -sf
    	ln ./libxbee.so.$(VERSION) ./lib/libxbee.so -sf
    
    ./lib/:
    	mkdir ./lib/
    
    ./obj/:
    	mkdir ./obj/
    
    ./obj/%.o: ./obj/ %.c %.h xbee.h
    	${CC} ${CFLAGS} ${DEFINES} ${DEBUG} $*.c -o $@
    
    ./obj/%.o: ./obj/ %.c xbee.h
    	${CC} ${CFLAGS} ${DEFINES} ${DEBUG} $*.c -o $@
    
    
    # pdfs - generate PDFs for each source file #
    ifneq ($(strip $(wildcard /usr/bin/ps2pdf)),)
    ifneq ($(strip $(wildcard /usr/bin/enscript)),)
    pdfs: ./pdf/ ${addprefix ./pdf/,${addsuffix .pdf,${PDFS}}}
    
    ./pdf/:
    	mkdir ./pdf/
    
    ./pdf/makefile.pdf: ./makefile
    	enscript ${ENSCRIPT} -Emakefile $< -p - | ps2pdf - $@
    
    ./pdf/%.pdf: %
    	enscript ${ENSCRIPT} -Ec $< -p - | ps2pdf - $@
    
    ./pdf/%.pdf:
    	@echo "*** Cannot make $@ - '$*' does not exist ***"
    else
    pdfs:
    	@echo "WARNING: enscript is not installed - cannot generate PDF files"
    endif
    else
    pdfs:
    	@echo "WARNING: ps2pdf is not installed - cannot generate PDF files"
    endif