# file : libpkgconf/buildfile # copyright : Copyright (c) 2016-2018 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/manifest tclass = $c.target.class # 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 ($tclass == "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: # # /../lib/pkgconfig;/../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.class == 'msvc') c.coptions += /wd4996 /wd4267 if ($tclass == "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. # # We will also re-enable definitions of POSIX macros (specifically PATH_MAX) # that are disabled by -std=c9x. # if ($tclass != "windows") { # On FreeBSD and MacOS -D_POSIX_C_SOURCE disables declarations of strndup(), # strlcpy() and alike, that are not POSIX. Not very consistent given that # they are also not C99. Luckily, -std=c9x doesn't disable PATH_MAX on these # OSes, so we just don't define the macro for them. # # @@ It all becomes a bit hairy. Should we just undefine the corresponding # HAVE_* macros in config.h, so the custom function implementations are # picked up? Alternatively, can we stop specifying the C standard and # defining _POSIX_C_SOURCE macro altogether? # if ($tclass != "bsd" && $tclass != "macos") c.poptions += -D_POSIX_C_SOURCE=200112L 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