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







                                                                      
                  









                                            
                      
             

 
                

                  


             



                                                                                                  
                                                                                                  




                                                                                                  
                              


 
 
           

                           
           

         
            
                    
 
                      
                     
 
 
              

                                  
                     
                    
                                                                  
 
            

                                      
                     
                    
                                                        
 
            


                                               

                                                                                                    

                                                                
         

                                                 
                     


                                                                                          


 
               
                                                                                       
 
                      
                                
                                                                          
 
                    
                                
                                                                               
 
                    
                               
                                                                             
 
                 
                                           

                                                                                      
                                                                                  
 
                       



                                                                        
                   
                         
 
                    

                                                                                       
 

 
                 
                                                                                                     
 
                        
                 
                                                
 
                      
               
                                                   
 
                      
               
                                                  
 
                   
            

                                                     
                                                         
 
                         




                                                        
                     

                             
                      
               
                                                               
 
 
 
             

                     
 
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.  This file is offered as-is,
# without any warranty.

PREFIX = /usr
DATA = /share
LIB = /lib
INCLUDE = /include
BIN = /bin
ENV = /usr$(BIN)/env
BASHSHEBANG = $(ENV) bash
PY3SHEBANG = $(ENV) python3
PKGNAME = argparser
LICENSES = $(PREFIX)$(DATA)
PY3VERSION = 3.3
LIBPY3 = $(PREFIX)$(LIB)/python$(PY3VERSION)
LIBBASH = $(PREFIX)$(LIB)
LIBJAVA = $(PREFIX)$(LIB)
LIBC = $(PREFIX)$(LIB)
VERSION = 3.0


C_OPTIMISE = -O6
JAVA_OPTIMISE = -O

JAVAC = javac


WARN = -Wall -Wextra -pedantic -Wdouble-promotion -Wformat=2 -Winit-self -Wmissing-include-dirs  \
       -Wtrampolines -Wfloat-equal -Wshadow -Wmissing-prototypes -Wmissing-declarations          \
       -Wredundant-decls -Wnested-externs -Winline -Wno-variadic-macros -Wsync-nand              \
       -Wunsafe-loop-optimizations -Wcast-align -Wstrict-overflow -Wdeclaration-after-statement  \
       -Wundef -Wbad-function-cast -Wcast-qual -Wwrite-strings -Wlogical-op                      \
       -Wstrict-prototypes -Wold-style-definition -Wpacked -Wvector-operation-performance        \
       -Wunsuffixed-float-constants -Wsuggest-attribute=const -Wsuggest-attribute=noreturn       \
       -Wsuggest-attribute=pure -Wsuggest-attribute=format -Wnormalized=nfkc -Wconversion        \
       -fstrict-aliasing -fstrict-overflow -fipa-pure-const -ftree-vrp -fstack-usage             \
       -funsafe-loop-optimizations
# excluded: -Waggregate-return




.PHONY: all
all: python bash java c doc

.PHONY: doc
doc: info

.PHONY: info
info: argparser.info

%.info: info/%.texinfo
	makeinfo "$<"


.PHONY: python
python: bin/argparser.py
bin/argparser.py: src/argparser.py
	@mkdir -p bin
	cp "$<" "$@"
	sed -i 's:^#!/usr/bin/env python3$$:#!$(PY3SHEBANG):' "$@"

.PHONY: bash
bash: bin/argparser.bash
bin/argparser.bash: src/argparser.bash
	@mkdir -p bin
	cp "$<" "$@"
	sed -i 's:^#!/bin/bash$$:#!$(BASHSHEBANG):' "$@"

.PHONY: java
java: bin/ArgParser.jar
bin/ArgParser.jar: src/argparser/ArgParser.java
	@mkdir -p bin
	$(JAVAC) $(JAVA_OPTIMISE) -encoding UTF-8 -cp src -s src -d bin src/argparser/ArgParser.java
	$(JAVAC) $(JAVA_OPTIMISE) -encoding UTF-8 -cp src -s src -d bin src/Test.java
	cd bin ; jar cf ArgParser.jar argparser/ArgParser*.class

.PHONY: c
c: bin/argparser.so
bin/argparser.so: src/argparser.c src/argparser.h
	@mkdir -p bin
	$(CC) $(C_OPTIMISE) -std=gnu99 $(WARN) -fPIC -c src/argparser.c -o bin/argparser.o
	$(CC) $(C_OPTIMISE) -std=gnu99 $(WARN) -shared bin/argparser.o -o bin/argparser.so
	$(CC) $(C_OPTIMISE) -std=gnu99 $(WARN) src/test.c bin/argparser.o -o bin/test



.PHONY: install
install: install-python install-bash install-java install-c install-license install-doc

.PHONY: install-python
install-python: bin/argparser.py
	install -Dm644 bin/argparser.py "$(DESTDIR)$(LIBPY3)/argparser.py"

.PHONY: install-bash
install-bash: bin/argparser.bash
	install -Dm644 bin/argparser.bash "$(DESTDIR)$(LIBBASH)/argparser.bash"

.PHONY: install-java
install-java: bin/ArgParser.jar
	install -Dm644 bin/ArgParser.jar "$(DESTDIR)$(LIBJAVA)/ArgParser.jar"

.PHONY: install-c
install-c: bin/argparser.so src/argparser.h
	install -Dm644 bin/argparser.so "$(DESTDIR)$(LIBC)/libargparser.so.$(VERSION)"
	ln -s "libargparser.so.$(VERSION)" "$(DESTDIR)$(LIBC)/libargparser.so"
	install -Dm644 src/argparser.h "$(DESTDIR)$(PREFIX)$(INCLUDE)/argparser.h"

.PHONY: install-license
install-license:
	install -d "$(DESTDIR)$(LICENSES)/$(PKGNAME)"
	install -m644 COPYING LICENSE "$(DESTDIR)$(LICENSES)/$(PKGNAME)"

.PHONY: install-doc
install-doc: install-info

.PHONY: install-info
install-info: argparser.info
	install -Dm644 argparser.info "$(DESTDIR)$(PREFIX)$(DATA)/info/$(PKGNAME).info"



.PHONY: uninstall
uninstall: uninstall-python uninstall-bash uninstall-java uninstall-c uninstall-license uninstall-doc

.PHONY: uninstall-python
uninstall-python:
	rm -- "$(DESTDIR)$(LIBPY3)/argparser.py"

.PHONY: uninstall-bash
uninstall-bash:
	rm -- "$(DESTDIR)$(LIBBASH)/argparser.bash"

.PHONY: uninstall-java
uninstall-java:
	rm -- "$(DESTDIR)$(LIBJAVA)/ArgParser.jar"

.PHONY: uninstall-c
uninstall-c:
	rm -- "$(DESTDIR)$(LIBC)/libargparser.so"
	rm -- "$(DESTDIR)$(LIBC)/libargparser.so.1.0"
	rm -- "$(DESTDIR)$(PREFIX)$(INCLUDE)/argparser.h"

.PHONY: uninstall-license
uninstall-license:
	rm -- "$(DESTDIR)$(LICENSES)/$(PKGNAME)/LICENSE"
	rm -- "$(DESTDIR)$(LICENSES)/$(PKGNAME)/COPYING"
	-rmdir -- "$(DESTDIR)$(LICENSES)/$(PKGNAME)"

.PHONY: uninstall-doc
uninstall-doc: uninstall-info

.PHONY: uninstall-info
uninstall-info:
	rm -- "$(DESTDIR)$(PREFIX)$(DATA)/info/$(PKGNAME).info"



.PHONY: clean
clean:
	-rm -r -- bin