################################################################################ # vls (VideoLAN Server) main Makefile #------------------------------------------------------------------------------- # (c)1999-2001 VideoLAN # $Id: Makefile,v 1.102.4.4 2004/01/10 21:54:57 alexis Exp $ ################################################################################ ifeq ($(shell [ ! -r Makefile.opts ] && echo 1),) include Makefile.opts endif CCFLAGS += ${CFLAGS} ################################################################################ # Common options ################################################################################ LCFLAGS += $(VLS_LCFLAGS) ################################################################################ # Files description ################################################################################ # # Source files # ifeq ($(NEEDSRC_core),1) SRC+= src/core/application.cpp \ src/core/exception.cpp \ src/core/file.cpp \ src/core/lexer.cpp \ src/core/log.cpp \ src/core/parsers.cpp \ src/core/reflect.cpp \ src/core/serialization.cpp \ src/core/settings.cpp \ src/core/socket.cpp \ src/core/string.cpp \ src/core/system.cpp \ src/core/thread.cpp \ src/core/module.cpp \ src/core/iso_lang.cpp \ endif ifeq ($(NEEDSRC_server),1) SRC+= src/server/buffer.cpp \ src/server/directory.cpp \ src/server/input.cpp \ src/server/output.cpp \ src/server/channel.cpp \ src/server/request.cpp \ src/server/admin.cpp \ src/server/broadcast.cpp \ src/server/manager.cpp \ src/server/program.cpp \ src/server/telnet.cpp \ src/server/nativeadmin.cpp \ src/server/tsstreamer.cpp \ src/server/vls.cpp \ endif ifeq ($(NEEDSRC_daemon),1) SRC+= src/server/daemon.cpp \ endif ifeq ($(NEEDSRC_mpegbase),1) SRC+= src/mpeg/ts.cpp \ src/mpeg/rtp.cpp \ src/mpeg/streamdescr.cpp \ src/mpeg/reader.cpp \ src/mpeg/converter.cpp \ endif ifeq ($(NEEDSRC_mpegmux),1) SRC+= src/mpeg/dvbpsi.cpp \ src/mpeg/tsdemux.cpp \ src/mpeg/tsmux.cpp \ endif ifeq ($(NEEDSRC_getopt),1) C_SRC+= src/extras/getopt.c \ src/extras/getopt1.c \ endif # # Module libraries # MODULE_LIST:= filereader \ dvdreader \ ts2ts \ ps2ts \ filechannel \ netchannel \ localinput \ videoinput \ dvbinput \ dvbreader \ BUILTINSTARGETS:=$(BUILTINS:%:bin/%.a) PLUGINSTARGETS:=$(PLUGINS:%:bin/%.so) # # Object files # OBJ:=$(SRC:src/%.cpp=obj/%.o) C_OBJ:=$(C_SRC:src/%.c=obj/%.o) # # Dependencies # DEP:=$(SRC:src/%.cpp=dep/%.dpp) C_DEP:=$(C_SRC:src/%.c=dep/%.d) # # Misc variables # VLS_QUICKVERSION := $(shell grep '^ *VLS_VERSION=' configure.in | cut -f2 -d=) # export symbols for recursive Makefiles export ################################################################################ # Targets definition ################################################################################ # # Build rules # all: Makefile.opts vls $(PLUGINS) Makefile.opts: @echo "**** No configuration found, please run ./configure..." @exit 1 vls_clean: rm -Rf obj module_clean: for module in $(MODULE_LIST) ; do \ ( cd src/modules/$$module && $(MAKE) clean ) ; done clean: module_clean vls_clean distclean: vls_clean rm -f bin/vls rm -f bin/vls.exe rm -f bin/vlsd rm -f bin/vlsd.exe rm -f config*status config*cache config*log rm -f Makefile.opts src/core/defs.h src/server/config.h rm -f src/server/vls_builtins.cpp rm -Rf dep rm -Rf *.log *.dbg for module in $(MODULE_LIST) ; do \ ( cd src/modules/$$module && $(MAKE) distclean ) ; done install: mkdir -p $(DESTDIR)$(bindir) $(INSTALL) bin/vls $(DESTDIR)$(bindir) $(INSTALL) bin/vlsd $(DESTDIR)$(bindir) mkdir -p $(DESTDIR)$(libdir)/videolan/vls ifneq (,$(PLUGINS)) $(INSTALL) -m 644 $(PLUGINS:%=bin/%.so) $(DESTDIR)$(libdir)/videolan/vls endif mkdir -p $(DESTDIR)$(sysconfdir)/videolan/vls test -r $(DESTDIR)$(sysconfdir)/videolan/vls/vls.cfg-dist || $(INSTALL) -m 644 vls.cfg $(DESTDIR)$(sysconfdir)/videolan/vls/vls.cfg-dist @echo "Installation succeeded." uninstall: rm -f $(DESTDIR)$(bindir)/vls rm -f $(DESTDIR)$(bindir)/vlsd rm -f $(DESTDIR)$(libdir)/videolan/vls/*.so # Build lexer.cpp with flex lexer: flex -i -osrc/core/lexer.cpp src/core/lexer.lex dep: Makefile.opts $(DEP) vls: Makefile.opts $(OBJ) $(C_OBJ) $(BUILTINS) @echo "Linking $@..." @test -d bin || mkdir -p bin $(CXX) $(LCFLAGS) -o bin/$@$(EXEEXT) $(OBJ) $(C_OBJ) $(BUILTINS:%=obj/%.a) $(VLS_LIB) @test -f bin/vlsd$(EXEEXT) || ln -s $@ bin/$@d$(EXEEXT) chmod 755 bin/$@$(EXEEXT) dep/server/vls.dpp: src/server/vls_builtins.cpp src/server/vls_builtins.cpp: Makefile.opts rm -f $@ ifneq (,$(BUILTINS)) for builtin in $(BUILTINS) ; do \ echo "extern C_Module* NewBuiltin_"$$builtin"(handle hLog);" >> $@ ; \ done endif echo "" >> $@ echo "void C_Vls::LoadBuiltins()" >> $@ echo "{" >> $@ ifneq (,$(BUILTINS)) for builtin in $(BUILTINS) ; do \ echo " C_Module* pModule_"$$builtin" = NewBuiltin_"$$builtin"(m_hLog);" >> $@ ; \ echo " m_pModuleManager->RegisterModule(pModule_"$$builtin");" >> $@ ; \ done endif echo "}" >> $@ echo "" >> $@ $(PLUGINS): %: Makefile.opts $(PLUGINS): %: src/modules/%/Makefile cd src/modules/$* && $(MAKE) ../../../bin/$*.so $(BUILTINS): %: Makefile.opts $(BUILTINS): %: src/modules/%/Makefile cd src/modules/$* && $(MAKE) ../../../obj/$*.a $(OBJ): obj/%.o: Makefile.opts $(OBJ): obj/%.o: dep/%.dpp $(OBJ): obj/%.o: src/%.cpp @test -d obj/$(dir $*) || mkdir -p obj/$(dir $*) @echo "Compiling $<..." $(CXX) $(CCFLAGS) $(INCLUDE) -o $@ -c $< $(C_OBJ): obj/%.o: Makefile.opts $(C_OBJ): obj/%.o: dep/%.d $(C_OBJ): obj/%.o: src/%.c @test -d obj/$(dir $*) || mkdir -p obj/$(dir $*) @echo "Compiling $<..." $(CC) $(CCFLAGS) $(INCLUDE) -o $@ -c $< $(DEP): Makefile.opts Makefile FORCE $(DEP): dep/%.dpp: src/%.cpp @$(MAKE) -s --no-print-directory -f Makefile.dep $@ $(C_DEP): Makefile.opts Makefile FORCE $(C_DEP): dep/%.d: src/%.c @$(MAKE) -s --no-print-directory -f Makefile.dep $@ FORCE: # # Package generation rules # dist: # Check that tmp isn't in the way @if test -e tmp; then \ echo "Error: please remove ./tmp, it is in the way"; false; \ else \ echo "Starting dist's build."; mkdir tmp; \ fi # Copy directory structure in tmp find -type d | grep -v '\(snapshot\|CVS\)' | while read i ; \ do mkdir -p tmp/vls/$$i ; \ done rm -Rf tmp/vls/tmp find debian -mindepth 1 -maxdepth 1 -type d | \ while read i ; do rm -Rf tmp/vls/$$i ; done mkdir -p tmp/vls/doc mkdir -p tmp/vls/doc/developer # Copy .c .h .in .cpp and .def files find src -type f -name '*.[chi]*' | while read i ; \ do cp $$i tmp/vls/$$i ; done cp src/core/iso-639.def tmp/vls/src/core # Copy module Makefiles find src/modules -type f -name Makefile | while read i ; \ do cp $$i tmp/vls/$$i ; done # Copy documentation for file in doc/developer/*.sgml doc/developer/*.dia \ doc/developer/*.eps doc/developer/*.jpg \ doc/developer/*.dsl doc/developer/*.sda ; \ do cp $$file tmp/vls/doc/developer ; done # Copy misc files cp AUTHORS COPYING TODO todo.pl ChangeLog* README* INSTALL* \ vls.cfg Makefile Makefile.dep Makefile.module \ Makefile.module.dep Makefile.opts.in \ configure configure.in install-sh config.sub config.guess \ tmp/vls/ # Copy MS Visual Studio project files cp vls.sln vls.vcproj tmp/vls # Copy Debian control files for file in debian/*dirs debian/*docs debian/*menu debian/*desktop \ debian/*copyright debian/*conffiles ; \ do cp $$file tmp/vls/debian ; done for file in control changelog rules vls.1 ; do \ cp debian/$$file tmp/vls/debian/ ; done # Copy rpm spec file cp vls.spec tmp/vls # Build archives F=vls-${VLS_QUICKVERSION}; \ mv tmp/vls tmp/$$F; (cd tmp ; tar cf $$F.tar $$F); \ bzip2 -f -9 < tmp/$$F.tar > $$F.tar.bz2; \ gzip -f -9 tmp/$$F.tar ; mv tmp/$$F.tar.gz . # Clean up rm -Rf tmp