aboutsummaryrefslogblamecommitdiffstats
path: root/lib/diameter/test/Makefile
blob: f9e0a61215f43f0ceb9ba96513534a754f4b3a28 (plain) (tree)
1
2
3
4
5
6
7
8
9
 

                  
                                                       
 


                                                                  
 






                                                                          


                

                                        



                                                      
 
                 
 
                     



                                                      
 

                                         





                                                      
                                 

                                         
                                                      
                                                   
 

                                  



                                                      

                                                                     

                                        
                                    

                                    




                                                      

                              


                                        
                     
              
 



                            
      
                             
                                 

                
                  
 

     

                                                                    
     

                                                      
             
                               
             
                            




                                                                             
                                                      

     

                                                      
             
                        


                                                



                                                                             
             

                                                              
             
                                      
                                               
             
                         
                                                     
                                                      
 
                                                                   
 



                                                      
                                                                      

                                                                     
                  
                         



                                                     
                                                          
                                                      
 










                                                          


                
                       
 

                                                      
                                                      
 
           
                                                
 
                                              
 
                               
 
                   
                                      


                                            
                                      
                                              

                                 
                                               

                                                                 
 
      

                                                         
             
                                      


                                                                  







                                                      
                                                   





                  
#
# %CopyrightBegin%
#
# Copyright Ericsson AB 2010-2013. All Rights Reserved.
#
# 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.
#
# %CopyrightEnd%

include $(ERL_TOP)/make/target.mk
include $(ERL_TOP)/make/$(TARGET)/otp.mk

# ----------------------------------------------------
# Application version
# ----------------------------------------------------

include ../vsn.mk

VSN = $(DIAMETER_VSN)

# ----------------------------------------------------
# Release directory specification
# ----------------------------------------------------

RELSYSDIR = $(RELEASE_PATH)/diameter_test

# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------

include modules.mk

ERL_FILES    = $(MODULES:%=%.erl)
TARGET_FILES = $(MODULES:%=%.$(EMULATOR))

SUITE_MODULES = $(filter diameter_%_SUITE, $(MODULES))
SUITES        = $(SUITE_MODULES:diameter_%_SUITE=%)

DATA_DIRS = $(sort $(dir $(DATA)))

# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------

# This is only used to compile suite locally when running with a
# target like 'all' below. Target release_tests only installs source.
ERL_COMPILE_FLAGS += +warn_export_vars \
                     +warn_unused_vars \
                     -I ../include \
                     -I ../src/gen \
                     $(STRICT_FLAGS)

# ----------------------------------------------------
# Targets
# ----------------------------------------------------

all debug opt: $(TARGET_FILES)

strict:
	$(MAKE) opt STRICT_FLAGS=-Werror

# Require success ...
run: $(SUITES)

# ... or not.
any: opt
	$(MAKE) -i $(SUITES)

clean:
	rm -f $(TARGET_FILES)
	rm -f depend.mk coverspec

realclean: clean
	rm -rf log

docs:

list = echo $(1):; echo $($(1)) | tr ' ' '\n' | sort | sed 's@^@  @'

info:
	@echo ========================================
	@$(call list,MODULES)
	@echo
	@$(call list,HRL_FILES)
	@echo
	@$(call list,SUITES)
	@echo
	@echo erl = $(shell which erl)
	@erl -noinput \
	     -eval 'io:format("diameter = ~s~n", [code:lib_dir(diameter)])' \
	     -s init stop
	@echo ========================================

help:
	@echo ========================================
	@echo "Useful targets:"
	@echo
	@echo "    all:"
	@echo "        Compile all test suites."
	@echo
	@echo "    run:"
	@echo "        Compile and run all test suites, stop on failure."
	@echo
	@echo "    any:"
	@echo "        Compile and run all test suites, ignore any failures."
	@echo
	@echo "    $(SUITES):"
	@echo "        Compile and run a specific test suite."
	@echo
	@echo "    clean | realclean:"
	@echo "        Remove generated files."
	@echo
	@echo "    info:"
	@echo "        Echo some relevant variables."
	@echo ========================================

.PHONY: all any run clean debug docs help info opt realclean strict

# ----------------------------------------------------
# Special Targets
# ----------------------------------------------------

# Exit with a non-zero status if the output looks to indicate failure.
# diameter_ct:run/1 itself can't tell (it seems). The absolute -pa is
# because ct will change directories.
$(SUITES): log opt
	$(ERL) -noinput \
	       -pa $(realpath ../ebin) \
	       -sname diameter_test_$@ \
	       -s diameter_ct run diameter_$@_SUITE \
	       -s init stop \
	| awk '{print} / FAILED /{rc=1} END{exit rc}' rc=0
# Shorter in sed but requires a GNU extension (ie. Q).

cover: log opt coverspec
	$(ERL) -noinput \
	       -pa $(realpath ../ebin) \
	       -sname diameter_cover \
	       -s diameter_ct cover \
	       -s init stop \
	| awk '{print} / FAILED /{rc=1} END{exit rc}' rc=0

coverspec: diameter.cover
	sed -f $@.sed $< > $@

log:
	mkdir $@

.PHONY: $(SUITES) cover

# ----------------------------------------------------
# Release Targets
# ----------------------------------------------------

/%: % force
	sed -f release.sed $< > "$(RELSYSDIR)$@"

include $(ERL_TOP)/make/otp_release_targets.mk

release_spec release_docs_spec:

release_tests_spec:
	$(INSTALL_DIR)  "$(RELSYSDIR)"
	$(INSTALL_DATA) $(TEST_SPEC_FILE) \
	                $(COVER_SPEC_FILE) \
	                $(HRL_FILES) \
	                "$(RELSYSDIR)"
	$(MAKE) $(DATA_DIRS:%/=release_data_%)
	$(MAKE) $(ERL_FILES:%=/%)

$(DATA_DIRS:%/=release_data_%): release_data_%:
	$(INSTALL_DIR) "$(RELSYSDIR)/$*"
	$(INSTALL_DATA) $(filter $*/%, $(DATA)) "$(RELSYSDIR)/$*"

force:

.PHONY: release_spec release_docs_spec release_test_specs
.PHONY: force
.PHONY: $(DATA_DIRS:%/=release_data_%)

# Can't just make $(ERL_FILES:%=/%) phony since then implicit rule
# searching is skipped.

# ----------------------------------------------------

depend: depend.mk

# Generate dependencies makefile.
depend.mk: depend.sed $(MODULES:%=%.erl) Makefile
	(for f in $(MODULES); do \
	     (echo $$f; cat $$f.erl) | sed -f $<; \
	 done) \
	> $@

-include depend.mk

.PHONY: depend