# # ***** BEGIN LICENSE BLOCK ***** # # Copyright (C) 2009-2016 Olof Hagsand and Benny Holmgren # Copyright (C) 2017-2019 Olof Hagsand # Copyright (C) 2020-2022 Olof Hagsand and Rubicon Communications, LLC(Netgate) # # This file is part of CLIXON # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Alternatively, the contents of this file may be used under the terms of # the GNU General Public License Version 3 or later (the "GPL"), # in which case the provisions of the GPL are applicable instead # of those above. If you wish to allow use of your version of this file only # under the terms of the GPL, and not to allow others to # use your version of this file under the terms of Apache License version 2, # indicate your decision by deleting the provisions above and replace them with # the notice and other provisions required by the GPL. If you do not delete # the provisions above, a recipient may use your version of this file under # the terms of any one of the Apache License version 2 or the GPL. # # ***** END LICENSE BLOCK ***** # prefix = @prefix@ exec_prefix = @exec_prefix@ # abs_top_builddir is by default the absolute path of the builddir. includedir = @includedir@ datadir = @datarootdir@ localstatedir = @localstatedir@ sysconfdir = @sysconfdir@ VPATH = @srcdir@ srcdir = @srcdir@ libdir = @libdir@ top_srcdir = @top_srcdir@ CC = @CC@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ INSTALL = @INSTALL@ INCLUDES = -I. -I@srcdir@ @INCLUDES@ SHELL = /bin/sh SUBDIRS1 = include lib SUBDIRS2 = apps etc yang # without include lib for circular dependency SUBDIRS= $(SUBDIRS1) $(SUBDIRS2) .PHONY: doc example install-example clean-example all clean depend $(SUBDIRS) \ install loc TAGS .config.status docker test util checkroot mrproper \ checkinstall warnroot install-util clean-util all: $(SUBDIRS2) warnroot @echo "\e[32mAfter 'make install' as euid root, build example app and test utils: 'make example'\e[0m" checkroot: @if command -v id &> /dev/null; then \ if [ "$${DESTDIR}" = "" -a $$(id -u) != "0" ]; then \ echo "\e[31mThis target must be made as euid root\e[0m"; exit 1; \ fi; \ fi; warnroot: @if command -v id &> /dev/null; then \ if [ $$(id -u) = 0 ]; then \ echo "\e[36mWarning: You built this target as uid root\e[0m"; exit 0; \ fi; \ fi; checkinstall: @if [ ! -f $(prefix)/include/clixon/clixon.h ]; then \ echo "\e[31mclixon must be installed first to build this target. "\ "Run 'make'. Then run 'make install' as root.\e[0m"; exit 1; fi; # May cause circular include->include,lib $(SUBDIRS2): $(SUBDIRS1) # Cannot build app before lib (for parallel make -j) (cd $@ && $(MAKE) $(MFLAGS) all) $(SUBDIRS1): (cd $@ && $(MAKE) $(MFLAGS) all) depend: for i in $(SUBDIRS) doc example docker; \ do (cd $$i && $(MAKE) $(MFLAGS) depend); done # Needs root permissions on most systems by default install: checkroot for i in $(SUBDIRS) doc; \ do (cd $$i; $(MAKE) $(MFLAGS) $@)||exit 1; done; $(MAKE) $(MFLAGS) install-include install-include: for i in $(SUBDIRS) doc; \ do (cd $$i && $(MAKE) $(MFLAGS) $@)||exit 1; done; @echo "\e[32mTo install example app and test utils: make install-example\e[0m" uninstall: checkroot for i in $(SUBDIRS) doc example util docker; \ do (cd $$i && $(MAKE) $(MFLAGS) $@)||exit 1; done; doc: warnroot cd $@; $(MAKE) $(MFLAGS) $@ util: cd $@; $(MAKE) $(MFLAGS) clean-util: cd util; $(MAKE) $(MFLAGS) clean install-util: cd util; $(MAKE) $(MFLAGS) install uninstall-util: cd util; $(MAKE) $(MFLAGS) uninstall clean-example: for i in example util; \ do (cd $$i && $(MAKE) $(MFLAGS) clean) || exit 1; done; install-example: checkroot for i in example util; \ do (cd $$i && $(MAKE) $(MFLAGS) install) || exit 1; done; uninstall-example: checkroot for i in example util; \ do (cd $$i && $(MAKE) $(MFLAGS) uninstall) || exit 1; done; config.status: configure $(SHELL) config.status --recheck configure: configure.ac cd $(srcdir) && autoconf clean: for i in $(SUBDIRS) doc example util docker; \ do (cd $$i && $(MAKE) $(MFLAGS) $@); done; rm -f *.gcov test/*.gcov # Uninstall and clean all the targets used for testing, but without cloning or # checking-out from git. Provides a reliabily clean slate for testing changes # before commit. mrproper: uninstall uninstall-example uninstall-util clean clean-example clean-util distclean: rm -f Makefile TAGS config.status config.log *~ .depend rm -rf autom4te.cache build-root/rpmbuild rm -f build-root/*.tar.xz build-root/*.rpm extras/rpm/Makefile for i in $(SUBDIRS) doc example util docker; \ do (cd $$i && $(MAKE) $(MFLAGS) $@); done export BR=$(CURDIR)/build-root $(BR)/scripts/.version: ifneq ("$(wildcard /etc/redhat-release)","") $(shell $(BR)/scripts/version rpm-string > $(BR)/scripts/.version) else $(shell $(BR)/scripts/version > $(BR)/scripts/.version) endif DIST_FILE = $(BR)/clixon-$(shell extras/scripts/version).tar DIST_SUBDIR = clixon-$(shell extras/scripts/version | cut -f1 -d-) dist: @if git rev-parse 2> /dev/null ; then \ git archive \ --prefix=$(DIST_SUBDIR)/ \ --format=tar \ -o $(DIST_FILE) \ HEAD ; \ git describe > $(BR)/.version ; \ else \ (cd .. ; tar -cf $(DIST_FILE) $(DIST_SUBDIR) --exclude=*.tar) ; \ extras/scripts/version > $(BR)/.version ; \ fi @tar --append \ --file $(DIST_FILE) \ --transform='s,.*/.version,$(DIST_SUBDIR)/extras/scripts/.version,' \ $(BR)/.version @$(RM) $(BR)/.version $(DIST_FILE).xz @xz -v --threads=0 $(DIST_FILE) @$(RM) $(BR)/clixon-latest.tar.xz @ln -rs $(DIST_FILE).xz $(BR)/clixon-latest.tar.xz pkg-rpm: dist make -C extras/rpm pkg-srpm: dist make -C extras/rpm srpm # To make the example you need to run the "install-include" target first example: checkinstall util warnroot (cd $@ && $(MAKE) $(MFLAGS) all) @echo "\e[36mRemember to run 'make install-example' as euid root\e[0m" # Run a clixon test container. # Alt: cd test; ./all.sh test: $(MAKE) -C docker $(MFLAGS) $@ docker: for i in docker; \ do (cd $$i && $(MAKE) $(MFLAGS) $@); done # Lines of code loc: find . -name '*.[chyl]' -type f | xargs wc -l | tail -1 2> /dev/null TAGS: find $(srcdir) -name '*.[chyl]' -type f | grep -v \.tab\.[ch] | grep -v lex.*.c | grep -v .yy.c | etags -