File: Makefile

package info (click to toggle)
libtexttools 2.1.0-30
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 932 kB
  • sloc: ada: 11,394; ansic: 529; makefile: 106; sed: 78; sh: 12
file content (155 lines) | stat: -rw-r--r-- 5,436 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# Build script for Texttools.
# Copyright (c) 2003-2009 Ludovic Brenta <lbrenta@debian.org>
# Copyright (c) 2009-2012 Nicolas Boulenguez <nicolas.boulenguez@free.fr>

#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

########################
# Global configuration #
########################

LIB_NAME := texttools

SOVERSION := 1

################################
# Build and test configuration #
################################

# Use environment variables if available, this is common practice for
# CPPFLAGS, CFLAGS and LDFLAGS.
CFLAGS   ?= -O2
ADAFLAGS ?= -O2

.NOTPARALLEL:
GNATMAKE_OPTIONS := -j$(shell getconf _NPROCESSORS_ONLN)

ifdef ALL_CHECKS
  CFLAGS += -Wall -Wextra -Wformat -Wformat-security -g
  ADAFLAGS += -Wall -Wextra -g -gnatE -gnatQ -gnatVa -gnata -gnatf	\
  -gnato -gnatq -gnatySdx -gnaty0 -gnatyM159 -gnatw.e -gnatwH
  GNATMAKE_OPTIONS += -s -we
endif

# We want the same compiler for C and Ada sources.
CC := gnatgcc

LDLIBS := $(shell ncurses5-config --libs)

##############################
# Installation configuration #
##############################

# Each of the following path should be prefixed with
DESTDIR :=

# The sources files are installed into a LIB_NAME subdirectory of
SRC_DIR := usr/share/ada/adainclude

# A LIB_NAME.gpr project convenient for library usage is installed into
GPR_DIR := usr/share/ada/adainclude
# The content of this file ignores DESTDIR.

# The GNAT ALI files are installed into a LIB_NAME subdirectory of
ALI_DIR := usr/lib/ada/adalib

# The static and dynamic library are installed into
LIB_DIR := usr/lib

#########
# Rules #
#########

build: build-dynamic build-static

build-dynamic build-static: build-%: $(LIB_NAME).gpr
	gnatmake -P$< $(GNATMAKE_OPTIONS) -XKIND=$*
clean::
	rm -f $(foreach dir,obj lib,$(foreach kind,dynamic static,build-$(dir)-$(kind)/*))

clean::
	find -name "*~" -delete

test: examples/examples.gpr build-static
	gnatmake -P$< $(GNATMAKE_OPTIONS) -XKIND=static
# Texttools.gpr is found in the current directory when executing this
# recipe, and will be found in the default system location after
# installation.

clean:: examples/examples.gpr texttools.gpr
	gnatclean -P$< -XKIND=static
	rm -f $^
# We need to create them for gnatclean, then suppress it as the last action.

install: build
	install --directory $(DESTDIR)/$(SRC_DIR)/$(LIB_NAME)
	install --mode=644 src/*.ad[sb] src/*.[ch] $(DESTDIR)/$(SRC_DIR)/$(LIB_NAME)
	install --directory $(DESTDIR)/$(GPR_DIR)
	sed template_for_installed_project \
          $(foreach var,LIB_NAME SRC_DIR ALI_DIR LDLIBS LIB_DIR, \
          -e 's/$$($(var))/$(subst $(space),"$(comma) ",$($(var)))/g') \
          > $(DESTDIR)/$(GPR_DIR)/$(LIB_NAME).gpr
	chmod 644 $(DESTDIR)/$(GPR_DIR)/$(LIB_NAME).gpr
	install --directory $(DESTDIR)/$(ALI_DIR)/$(LIB_NAME)
	install --mode=444 build-lib-dynamic/*.ali $(DESTDIR)/$(ALI_DIR)/$(LIB_NAME)
	install --directory $(DESTDIR)/$(LIB_DIR)
	install --mode=644 build-lib-static/lib$(LIB_NAME).a $(DESTDIR)/$(LIB_DIR)
	install --mode=644 build-lib-dynamic/lib$(LIB_NAME).so.$(SOVERSION) $(DESTDIR)/$(LIB_DIR)
	cd $(DESTDIR)/$(LIB_DIR) && ln --force --symbolic lib$(LIB_NAME).so.$(SOVERSION) lib$(LIB_NAME).so

uninstall:
	rm -rf $(DESTDIR)/$(SRC_DIR)/$(LIB_NAME)
	rm -f $(DESTDIR)/$(GPR_DIR)/$(LIB_NAME).gpr
	rm -rf $(DESTDIR)/$(ALI_DIR)/$(LIB_NAME)
	rm -f $(DESTDIR)/$(LIB_DIR)/lib$(LIB_NAME).a
	rm -f $(DESTDIR)/$(LIB_DIR)/lib$(LIB_NAME).so.$(SOVERSION)
	rm -f $(DESTDIR)/$(LIB_DIR)/lib$(LIB_NAME).so

############################################################
#  All that C stuff will be unnecessary with gprbuild’s mixed C/Ada
#  project files.  For the moment, gnatmake will embed all .o files,
#  we only have to compile them and store them in the object dir.

C_SRC := $(wildcard src/*.c)

C_OBJ_DYNAMIC := $(patsubst src/%.c,build-obj-dynamic/%.o,$(C_SRC))
build-dynamic: $(C_OBJ_DYNAMIC)
$(C_OBJ_DYNAMIC): build-obj-dynamic/%.o: src/%.c
	$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ -fPIC

C_OBJ_STATIC  := $(patsubst src/%.c,build-obj-static/%.o, $(C_SRC))
build-static: $(C_OBJ_STATIC)
$(C_OBJ_STATIC): build-obj-static/%.o: src/%.c
	$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@

C_OBJ_TEST    := $(patsubst src/%.c,examples/%.o,  $(C_SRC))
test: $(C_OBJ_TEST)
$(C_OBJ_TEST): CFLAGS += -g -Wall -Wextra
$(C_OBJ_TEST): examples/%.o: src/%.c
	$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
clean::
	rm -f $(C_OBJ_TEST)

# gnatmake 4.4 does not handle External_As_List, so we emulate it with
# a template instead of passing the options with -X.
comma := ,
empty :=
space := $(empty) $(empty)
texttools.gpr examples/examples.gpr: %.gpr: %.gpr.sed
	sed $< \
	 $(foreach var,ADAFLAGS CFLAGS LDFLAGS LDLIBS SOVERSION, \
	   -e 's/$(var)/$(subst $(space),"$(comma) ",$($(var)))/') \
	 > $@

.PHONY: build build-dynamic build-static clean install test uninstall