# -*-Mode: Makefile;-*- # # To rebuild PERL2ARB from $ARBHOME call # make perl_clean perl ARB_MAINMAKEFILE=../Makefile THIS=Makefile.main # howto call Makefile.main (this file) MAKETHIS=$(MAKE) -f $(THIS) # howto call generated Makefile PMAKE=$(MAKE) "CC=$(A_CXX)" LIB=$(ARBHOME)/lib ARBDB=$(ARBHOME)/ARBDB # code in -> ../PERLTOOLS/arb_proto_2_xsub.cxx ARB_PROTO_2_XSUB=$(ARBHOME)/bin/arb_proto_2_xsub HEADERS = \ $(ARBDB)/ad_prot.h \ $(ARBDB)/ad_t_prot.h \ ifeq ($(DARWIN),1) SO:=bundle LIBSO:=a else SO:=so LIBSO:= so endif ARB_SO=blib/arch/auto/ARB/ARB.$(SO) TARGET_PM=$(LIB)/ARB.pm TARGET_SO=$(LIB)/ARB.$(SO) TARGETS=$(TARGET_PM) $(TARGET_SO) DOC=perl-interface-function-list.txt XS_DEPENDS = Makefile Makefile.main ARB.xs debug.h Makefile.PL # ../SOURCE_TOOLS/filter_defined_symbols.pl SHOW_UNDEFINED=$(ARBHOME)/SOURCE_TOOLS/filter_defined_symbols.pl WARN_UNDEFINED=./warn_undefined_symbols.pl # ------------------------------------------------------------ # variables for Makefile MYEXTLIB := PASTHRU_INC := PASTHRU_DEFINE := export MYEXTLIB PASTHRU_INC PASTHRU_DEFINE dflags export CC CXX A_CC A_CXX # ------------------------------------------------------------ # normal build calls this makefile with AUTODEPENDS==1 ifeq ($(AUTODEPENDS),1) all: @echo "-------- recurse $(THIS) to build depends" +test -f .depends || $(MAKETHIS) "AUTODEPENDS=0" .depends @echo "-------- done recurse $(THIS)" @echo "-------- recurse $(THIS) to build all" +$(MAKETHIS) "AUTODEPENDS=2" all @echo "-------- done recurse $(THIS)" else all: realall endif realall: perlmain.c $(TARGETS) $(DOC) perlmain.c: perlmain_source.c cp $< $@ $(TARGET_PM) : ARB.pm cp $< $@ $(TARGET_SO) : $(ARB_SO) $(SHOW_UNDEFINED) $(WARN_UNDEFINED) $(SHOW_UNDEFINED) $(ARB_SO) $(LIB)/libARBDB.$(LIBSO) $(LIB)/libCORE.$(LIBSO) | $(WARN_UNDEFINED) cp $< $@ # Note: the targets '$(ARB_SO)' and 'ARB.c' may not be called in parallel (causes failure) # To avoid doing that by mistake, they fail if AUTODEPENDS has wrong (unexpected) value. $(ARB_SO) : $(XS_DEPENDS) depends.stamp ifeq ($(AUTODEPENDS),2) rm $(ARB_SO) || true @echo "Used perl version: `perl -v | grep 'This is perl'`" @echo "-------- calling MakeMaker-Makefile (to build module; AUTODEPENDS=$(AUTODEPENDS))" $(PMAKE) $@ @echo "-------- end of MakeMaker-Makefile" else $(error target '$@' not valid if AUTODEPENDS==$(AUTODEPENDS)) endif ARB.c : $(XS_DEPENDS) ifeq ($(AUTODEPENDS),0) @echo "-------- calling MakeMaker-Makefile (to generate C-source; AUTODEPENDS=$(AUTODEPENDS))" $(PMAKE) $@ @echo "-------- end of MakeMaker-Makefile" else $(error target '$@' not valid if AUTODEPENDS==$(AUTODEPENDS)) endif # buildMakefile # ------------------------------------------------------------ # hack to compile with gcc 4.7.x and perl 5.10.1 # (see http://bugs.arb-home.de/changeset/10566 for why) PERL_GCC_INCOMPAT:= \ v5.10.1___4.7.1 \ v5.10.1___4.7.2 \ v5.10.1___4.7.3 \ v5.10.1___4.7.4 \ PERL_GCC:=$(shell perl -e 'print "$$^V\n";')___$(COMPILER_VERSION) WONT_COMPILE_CXX11:=$(findstring $(PERL_GCC),$(PERL_GCC_INCOMPAT)) ifneq ('$(WONT_COMPILE_CXX11)','') hacked_cflags:=$(subst -std=gnu++11,,$(cflags4perl)) else hacked_cflags:=$(cflags4perl) endif ifeq ($(USE_CLANG),1) hacked_cflags:=$(hacked_cflags) -Wno-duplicate-decl-specifier endif # disable several warnings for perl interface build # (would need changes in perl-core-api) disabled_warnings:= \ -Wno-zero-as-null-pointer-constant \ -Wno-literal-suffix \ -Wno-unused-parameter \ used_cflags:=$(subst -Weffc++,,$(hacked_cflags)) $(disabled_warnings) $(CXX_INCLUDES) used_lflags:=$(lflags4perl) MAKE_MAKEFILE=make_arbperl_makefile.pl Makefile : $(MAKE_MAKEFILE) typemap Makefile.main $(ARB_MAINMAKEFILE) Makefile.PL ( PATH=/usr/arb/bin:${PATH}; \ export PATH; \ echo calling perl $(MAKE_MAKEFILE) "$(used_cflags)" "$(used_lflags)"; \ perl $(MAKE_MAKEFILE) "$(used_cflags)" "$(used_lflags)" ) Makefile.PL : $(MAKE_MAKEFILE) ( \ echo "system('perl $< \"$(used_cflags)\" \"$(used_lflags)\"');" \ ) > $@ ARB.xs : $(ARB_PROTO_2_XSUB) proto.h ARB.default.xs perlmain_source.c typemap @(test -f $@ && chmod a+w $@) || true $(ARB_PROTO_2_XSUB) proto.h ARB.default.xs typemap >$@ @test -f $@ && chmod a-w $@ proto.h : $(HEADERS) $(THIS) depends.stamp cat $(HEADERS) > $@ debug.h : $(THIS) echo "#undef DEBUG" > $@ echo "#undef NDEBUG" >> $@ ifeq ($(DEBUG),1) echo "#define DEBUG" >> $@ else echo "#define NDEBUG" >> $@ endif c_source: $(TARGET_SO) test -f ARB.c || (echo "Error: Expected ARB.c to exist, but it doesn't"; false) $(DOC): proto.h extract_perl_interface.pl c_source ./extract_perl_interface.pl > $(DOC) clean: -test -f Makefile && $(MAKE) clean rm -f Makefile.old proto.h debug.h ARB.c ARB.xs .depends depends.stamp Makefile.PL $(TARGETS) $(DOC) rm -f Makefile .depends: depends.stamp Makefile.main @echo "-------- recurse $(THIS) to build C-module" +test -f ARB.c || $(MAKETHIS) "AUTODEPENDS=0" ARB.c @echo "-------- done recurse $(THIS)" $(MAKEDEPEND) -f- $(MAKEDEPENDFLAGS) ARB.c 2>/dev/null | \ perl -ne 's/ARB.o:/depends.stamp:/g; print $$_;' | \ ../SOURCE_TOOLS/fix_depends.pl "(from PERL2ARB)" > $@ depends.stamp: touch $@ ifeq ($(AUTODEPENDS),2) include .depends endif