# file : libpkgconf/buildfile # copyright : Copyright (c) 2016-2019 Code Synthesis Ltd # license : ISC; see accompanying COPYING file lib{pkgconf}: {h c}{* -version} {h}{version} # 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 bsd = ($tclass == 'bsd') macos = ($tclass == 'macos') windows = ($tclass == 'windows') msvc = ($c.class == 'msvc') # Build options. # c.poptions =+ "-I$out_root" "-I$src_root" # 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. # # There is also PERSONALITY_PATH macro added in 1.5.1. It looks like the # personality files are invented to fix cross-compilation but are unlikely to # have any noticeable distribution yet. Normally these files are located in # the personality.d/ subdirectory of the .pc files directory. # # @@ We should probably allow to configure these macros via configuration # variables config.pkgconfig.pkg_default_path and alike. # if! $windows { inc_dirs = "/usr/include" lib_dirs = "/usr/lib" if ($install.root != [null]) { def_dirs = "$install.resolve($install.pkgconfig)" personality_dirs = "$def_dirs/personality.d" } else { def_dirs = "" personality_dirs = "" } } else { 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 the macros empty. # def_paths = "" personality_dirs = "" } c.poptions += -DPKG_DEFAULT_PATH=\"$def_dirs\" \ -DSYSTEM_INCLUDEDIR=\"$inc_dirs\" \ -DSYSTEM_LIBDIR=\"$lib_dirs\" \ -DPERSONALITY_PATH=\"$personality_dirs\" # Disable warnings. # if $msvc c.coptions += /wd4996 /wd4267 if $windows { # See libpkgconf/libpkgconf-api.h for details. # objs{*}: c.poptions += -DLIBPKGCONF_EXPORT obja{*}: c.poptions += -DPKGCONFIG_IS_STATIC c.libs += $regex.apply(advapi32, \ '(.+)', \ $msvc ? '\1.lib' : '-l\1') } # 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! $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! ($bsd || $macos) c.poptions += -D_POSIX_C_SOURCE=200112L obj{client fragment path personality pkg queue tuple}: \ c.poptions += -D_GNU_SOURCE } # Export options. # lib{pkgconf}: cc.export.poptions = "-I$src_root" liba{pkgconf}: cc.export.poptions += -DPKGCONFIG_IS_STATIC # 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" # 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/libpkgconf/ 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