File: Makefile-autodetect

package info (click to toggle)
pasdoc 0.14.0-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 4,992 kB
  • ctags: 2,308
  • sloc: pascal: 26,085; makefile: 434; sh: 343; xml: 21
file content (133 lines) | stat: -rw-r--r-- 4,495 bytes parent folder | download | duplicates (2)
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
# -*- mode: Makefile -*-
#
###########################################################################
# This Makefile does some dirty tricks to autodetect many things
# about current OS. It does not do anything specific to pasdoc.
#
# It's contents are mostly taken from fpcmake sources,
# see fpc/utils/fpcm/fpcmake.ini in FPC source tree,
# and from Makefiles generated by fpcmake.
#
# Some handy things defined by this Makefile:
#
# - $(PATHSEP) is set to path seperator on this system.
#
# - $(MKDIRPROG) is set the command that behaves like "mkdir"
#   on POSIX-like environments (so you can pass "-p" to it, and so on).
#
#   Note that this will work even if you're on Windows and have only a
#   subset of MinGW tools that are installed with FPC
#   (and you don't have Cygwin or full MinGW Msys environment available).
#   In such case `make' runs your commands within a Windows shell,
#   so you can't simply write "mkdir", because then it will be understood
#   as Windows shell built-in "mkdir" command.
#   This Makefile will set MKDIRPROG to "gmkdir" command (installed with FPC),
#   (actually even to the full path to "gmkdir" command...)
#   so everything will work.
#
# - $(PACKAGEBASEDIR) is set to base temporary directory on this system,
#   that can be used to create temporary file tree for archives.
#
###########################################################################

###########################################################################
# Things below are a simplified version of section [osdetect] of fpcmake.ini
###########################################################################

# We need only / in the path also remove the current dir,
# also remove trailing /'s
override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))

# Detect unix
# Darwin is handled specially
ifneq ($(findstring darwin,$(OSTYPE)),)
inUnix=1 #darwin
SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
else
# Determine if we've a unix searchpath by looking for a ;
# that normally doesn't exists in the unix PATH var.
ifeq ($(findstring ;,$(PATH)),)
inUnix=1
SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
else
SEARCHPATH:=$(subst ;, ,$(PATH))
endif
endif

# Add path where make is located
SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))

# Search for PWD
# Also sets SRCEXEEXT
PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
ifeq ($(PWD),)
PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
ifeq ($(PWD),)
$(error You need the GNU utils package to use this Makefile)
else
PWD:=$(firstword $(PWD))
SRCEXEEXT=
endif
else
PWD:=$(firstword $(PWD))
SRCEXEEXT=.exe
endif

# Path Separator, the subst trick is necessary for the \ that can't exists
# at the end of a line
ifdef inUnix
PATHSEP=/
else
PATHSEP:=$(subst /,\,/)
endif

###########################################################################
# Detecting inCygWin 
# (but not the way like fpcmake does it; fpcmake way doesn't work...)
###########################################################################

ifdef inUnix
ifneq ($(strip $(wildcard $(addsuffix /cygpath$(SRCEXEEXT),$(SEARCHPATH)))),)
inCygWin=1
endif
endif

###########################################################################
# Detecting $(MKDIRPROG), this is copied from Makefile generated by fpcmake
###########################################################################

ifndef MKDIRPROG
MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
ifeq ($(MKDIRPROG),)
MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
ifeq ($(MKDIRPROG),)
MKDIRPROG= __missing_command_MKDIRPROG
else
MKDIRPROG:=$(firstword $(MKDIRPROG))
endif
else
MKDIRPROG:=$(firstword $(MKDIRPROG))
endif
endif

###########################################################################
# Guessing $(PACKAGEBASEDIR)
###########################################################################

# Temporary directory used for preparing archives
ifdef TEMP
PACKAGEBASEDIR := $(TEMP)

# Under Cygwin, make $(PACKAGEBASEDIR) directory in native format
# (not Cygwin's) because we may use it with some non-Cygwin tools.
# (But still I use "--mixed", not "--windows" param of cygpath, because make
# poorly handles "\" (convering \\ to \ is done in so many places that it's
# hard to handle...)
ifdef inCygWin
PACKAGEBASEDIR := $(shell cygpath --mixed $(PACKAGEBASEDIR))
endif

else
# /tmp is a good guess for Unices, and for Win32 if someone uses Cygwin's make
PACKAGEBASEDIR := /tmp
endif