# Makefile for GNU make include Makefile.dep # https://www.gnu.org/software/make/manual/html_node/Flavors.html#Flavors GLOBAL_WORKING_DIR := $(shell pwd)/../.. current_path := $(shell pwd) global_relative_working_dir := $(shell relative_path $(current_path) $(GLOBAL_WORKING_DIR)) ifeq ($(CXX), g++) CXX = g++6 endif ifndef CXX ifeq ($(OSTYPE), FreeBSD) CXX = clang++ else CXX = g++6 endif endif # CXX = g++-4.8 ifndef CXXFLAGS CXXFLAGS = -Wall -O0 -g -fPIC -pthread -std=c++20 -I/usr/local/include -I/usr/include/postgresql -I$(GLOBAL_WORKING_DIR)/pikotools/src -I$(GLOBAL_WORKING_DIR)/ezc/src -I$(GLOBAL_WORKING_DIR)/morm/src -DPT_HAS_MORM_LIBRARY -DEZC_HAS_MORM_LIBRARY -DMORM_HAS_EZC_LIBRARY endif ifndef AR AR = ar endif winix_include_paths = -I$(global_relative_working_dir)/winix/winixd -I$(global_relative_working_dir)/ezc/src -I$(global_relative_working_dir)/tito/src -I$(global_relative_working_dir)/morm/src -I$(global_relative_working_dir)/pikotools/src ifndef LDFLAGS LDFLAGS = -L/usr/local/lib endif # for make install winix_install_dir = /usr/local/winix export CXX export CXXFLAGS export LDFLAGS export GLOBAL_WORKING_DIR all: winix.so plugins winix winix.so: $(winix.src.files) @cd core ; $(MAKE) -e @cd models ; $(MAKE) -e @cd db ; $(MAKE) -e @cd functions ; $(MAKE) -e @cd templates ; $(MAKE) -e @cd notify ; $(MAKE) -e @cd utils ; $(MAKE) -e @cd $(GLOBAL_WORKING_DIR)/ezc/src ; $(MAKE) -e @cd $(GLOBAL_WORKING_DIR)/tito/src ; $(MAKE) -e @cd $(GLOBAL_WORKING_DIR)/pikotools ; $(MAKE) -e @cd $(GLOBAL_WORKING_DIR)/morm/src ; $(MAKE) -e $(CXX) -shared -rdynamic -Wl,-whole-archive -o winix.so $(CXXFLAGS) $(winix_include_paths) core/*.o db/*.o models/*.o functions/*.o templates/*.o notify/*.o utils/*.o $(GLOBAL_WORKING_DIR)/ezc/src/ezc.a $(GLOBAL_WORKING_DIR)/tito/src/tito.a $(GLOBAL_WORKING_DIR)/pikotools/src/pikotools.a $(GLOBAL_WORKING_DIR)/morm/src/morm.a $(LDFLAGS) -lfcgi -lpq -lz -lpthread -lcurl -lmagic -Wl,-no-whole-archive winix: winix.so $(winix.src.files) @cd main ; $(MAKE) -e $(CXX) -o winix $(CXXFLAGS) $(LDFLAGS) main/*.o winix.so -lfcgi plugins: FORCE @cd plugins/stats ; $(MAKE) -e @cd plugins/thread ; $(MAKE) -e @cd plugins/ticket ; $(MAKE) -e @cd plugins/gallery ; $(MAKE) -e @cd plugins/group ; $(MAKE) -e @cd plugins/menu ; $(MAKE) -e @cd plugins/export ; $(MAKE) -e @cd plugins/mailregister ; $(MAKE) -e @cd plugins/seo ; $(MAKE) -e FORCE: clean: @cd core ; $(MAKE) -e clean @cd db ; $(MAKE) -e clean @cd models ; $(MAKE) -e clean @cd functions ; $(MAKE) -e clean @cd templates ; $(MAKE) -e clean @cd notify ; $(MAKE) -e clean @cd utils ; $(MAKE) -e clean @cd plugins/stats ; $(MAKE) -e clean @cd plugins/thread ; $(MAKE) -e clean @cd plugins/ticket ; $(MAKE) -e clean @cd plugins/gallery ; $(MAKE) -e clean @cd plugins/group ; $(MAKE) -e clean @cd plugins/menu ; $(MAKE) -e clean @cd plugins/export ; $(MAKE) -e clean @cd plugins/mailregister ; $(MAKE) -e clean @cd plugins/seo ; $(MAKE) -e clean @cd $(GLOBAL_WORKING_DIR)/ezc/src ; $(MAKE) -e clean @cd $(GLOBAL_WORKING_DIR)/tito/src ; $(MAKE) -e clean @cd $(GLOBAL_WORKING_DIR)/pikotools ; $(MAKE) -e clean @cd $(GLOBAL_WORKING_DIR)/morm/src ; $(MAKE) -e clean @cd main ; $(MAKE) -e clean rm -f winix.so rm -f winix depend: @cd core ; $(MAKE) -e depend @cd db ; $(MAKE) -e depend @cd models ; $(MAKE) -e depend @cd functions ; $(MAKE) -e depend @cd templates ; $(MAKE) -e depend @cd notify ; $(MAKE) -e depend @cd utils ; $(MAKE) -e depend @cd plugins/stats ; $(MAKE) -e depend @cd plugins/thread ; $(MAKE) -e depend @cd plugins/ticket ; $(MAKE) -e depend @cd plugins/gallery ; $(MAKE) -e depend @cd plugins/group ; $(MAKE) -e depend @cd plugins/menu ; $(MAKE) -e depend @cd plugins/export ; $(MAKE) -e depend @cd plugins/mailregister ; $(MAKE) -e depend @cd plugins/seo ; $(MAKE) -e depend @cd $(GLOBAL_WORKING_DIR)/ezc/src ; $(MAKE) -e depend @cd $(GLOBAL_WORKING_DIR)/tito/src ; $(MAKE) -e depend @cd $(GLOBAL_WORKING_DIR)/pikotools ; $(MAKE) -e depend @cd main ; $(MAKE) -e depend echo -n "winix.src.files = " > Makefile.dep find -E . -type f -regex ".*\.h|.*\.cpp" | xargs -I foo echo -n foo " " >> Makefile.dep # use $(global_relative_working_dir) here to put relative paths to Makefile.dep find -E $(global_relative_working_dir)/ezc/src -type f -regex ".*\.h|.*\.cpp" | xargs -I foo echo -n foo " " >> Makefile.dep find -E $(global_relative_working_dir)/tito/src -type f -regex ".*\.h|.*\.cpp" | xargs -I foo echo -n foo " " >> Makefile.dep find -E $(global_relative_working_dir)/pikotools/src -type f -regex ".*\.h|.*\.cpp" | xargs -I foo echo -n foo " " >> Makefile.dep find -E $(global_relative_working_dir)/morm/src -type f -regex ".*\.h|.*\.cpp" | xargs -I foo echo -n foo " " >> Makefile.dep install: all # installing binaries rm -Rf $(winix_install_dir)/bin mkdir -p $(winix_install_dir)/bin cp winix $(winix_install_dir)/bin cp winix.so $(winix_install_dir)/bin # etc configs rm -Rf $(winix_install_dir)/etc mkdir -p $(winix_install_dir)/etc cp -rf etc/* $(winix_install_dir)/etc/ # html templates rm -Rf $(winix_install_dir)/html mkdir -p $(winix_install_dir)/html cp -rf html/* $(winix_install_dir)/html/ # txt templates rm -Rf $(winix_install_dir)/txt mkdir -p $(winix_install_dir)/txt cp -rf txt/* $(winix_install_dir)/txt/ # locales rm -Rf $(winix_install_dir)/locale mkdir -p $(winix_install_dir)/locale cp -rf locale/* $(winix_install_dir)/locale/ # plugins rm -Rf $(winix_install_dir)/plugins mkdir -p $(winix_install_dir)/plugins find plugins/ -name "*.so" | xargs -I foo cp foo $(winix_install_dir)/plugins/ # deleting subversion directories find $(winix_install_dir) -type d -name ".svn" | xargs -I foo rm -fr foo # removing privileges for others find $(winix_install_dir) -exec chmod o-r,o-x,o-w "{}" "+"