aboutsummaryrefslogtreecommitdiff
path: root/libpkgconf/buildfile
blob: c344ec74b2e2c8d9f57c48cead962d4e9e9410bd (plain)
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
# file      : libpkgconf/buildfile
# copyright : Copyright (c) 2016-2017 Code Synthesis Ltd
# license   : ISC; see accompanying COPYING file

lib{pkgconf}: {h c}{* -version} {h}{version}

# See bootstrap.build for details.
#
if $version.pre_release
  lib{pkgconf}: bin.lib.version = @"-$version.project_id"
else
  lib{pkgconf}: bin.lib.version = @"-$release_num"

# The version file is an internal one (it is only included from config.h) so we
# don't distribute nor install it (see below).
#
h{version}: in{version} $src_root/file{manifest}

# Define the PKG_DEFAULT_PATH, SYSTEM_INCLUDEDIR and SYSTEM_LIBDIR macros.
# The whole idea feels utterly broken (hello cross-compilation) so we will
# just do bare minimum and wait and see.
#
# @@ We should probably allow to configure these macros via configuration
#    variables config.pkgconfig.pkg_default_path and alike.
#
if ($c.target.class == "windows")
{
  inc_dirs = ""
  lib_dirs = ""

  # Note that on Windows PKG_DEFAULT_PATH macros is internally redefined as
  # "../lib/pkgconfig;../share/pkgconfig" and is used as a fallback. Normally
  # the default path is relative to the program's (that link the library)
  # directory and has the following format:
  #
  # <dir>/../lib/pkgconfig;<dir>/../share/pkgconfig
  #
  # So we keep it empty.
  #
  def_paths = ""
}
else
{
  inc_dirs = "/usr/include"
  lib_dirs = "/usr/lib"

  def_dirs = ($install.root != [null] \
              ? "$install.resolve($install.pkgconfig)" \
              : "")
}

c.poptions += -DPKG_DEFAULT_PATH=\"$def_dirs\" \
              -DSYSTEM_INCLUDEDIR=\"$inc_dirs\"  \
              -DSYSTEM_LIBDIR=\"$lib_dirs\"

# Disable warnings.
#
if ($c.target.system == "win32-msvc")
  c.coptions += /wd4996 /wd4267

if ($c.target.class == "windows")
{
  # See libpkgconf/libpkgconf-api.h for details.
  #
  objs{*}: c.poptions += -DLIBPKGCONF_EXPORT
  obja{*}: c.poptions += -DPKGCONFIG_IS_STATIC

  if ($c.target.system == "mingw32")
    c.libs += -ladvapi32
  else
    c.libs += advapi32.lib
}

c.poptions =+ "-I$out_root" "-I$src_root"

lib{pkgconf}:  cc.export.poptions = "-I$src_root"
liba{pkgconf}: cc.export.poptions += -DPKGCONFIG_IS_STATIC

# In the original package the source files are compiled with -std=gnu99 option
# to allow some GNU deviations from the ISO C99 standard. We will compile with
# -std=c9x option (is implied by c.std=99 in root.build) and define _GNU_SOURCE
# for the source files that require such deviations.
#
if ($c.target.class != "windows")
  obj{client fragment path pkg queue tuple}: c.poptions += -D_GNU_SOURCE

# Install into the pkgconf/libpkgconf/ subdirectory of, say, /usr/include/.
# Also make sure Cflags is properly set in .pc files to pkgconfig/.
#
{h}{*}: install = include/$project/
install.include = $install.include/pkgconf/

# For the original package config.h is generated during the configuration
# phase. We distribute a custom one with a minimal set of macro definitions
# required to build the project. Note that the file is an internal one (is
# only included from C files) and so is not installed.
#
h{config}@./: install = false

# Internal header (see above).
#
h{version}: install = false

# Implementation details.
#
h{stdinc}@./:     install = false
h{win-dirent}@./: install = false