Change `ln -s` to `cp` in the catgets makefile in the applied patch,
this is used for making symlinks to some header files, this will
hopefully fix building catgets for @ZachBacon on msys2. There seems to
be a problem with the mingw gcc reading headers that are symlinks, even
if they are real windows symlinks.
Also slightly refactor checking for target built files. Add the `-f`
flag for `install_artifact([-f] $dist)` for the full path to the target
file, and add the helper functions `check_install_artifact($dist)` and
`check_install_artifact_relative($dist $root_path)`.
These helper functions also display error messages if the target file
does not exist, as opposed to the previous behavior where it would just
silently exit nonzero.
Do not defer evaluating $BUILD_ENV in the msys2 host/target environment
overrides, as that causes the subsequent eval to try to run the variable
as a command.
Refactor the build environment evaluation, make build variables set
immediately so that they don't grow longer on re-evaluations and defer
all other variables. Export as many build related variables as possible.
Make one more crucial fix for cross builds: run the post_build after
LDFLAGS and LIBS are restored, so that this does not interfere with
setting and restoring the build environment for host builds.
Other changes:
- fontconfig 2.13.0 -> 2.13.1
- openal 1.19.0 -> 1.19.1
- set fontconfig configure type to autoreconf, disable tests
- disable the openssl parallel build patch, it fails unpredictably,
always build openssl with -j1
- configure libicu with --disable-tests and a few other things disabled,
the tests cause link issues on mingw i686
- also make a minor fix to libicu makefiles for mingw (replace echo -n
with printf)
- move $BUILD_ENV evaluation to the builder() main function to defer
some variable initializations
- add patch for openal to mingw-cross to use gcc instead of cmake to
build some native tools it uses, cmake causes issues with cross builds
- in host_env()/target_env() defer variable expansion and include a copy
of $BUILD_ENV in the appropriate sequence
Do not defer evaluating build env variables in mingw-cross.sh, this
interferes with switching them between host/target.
In build_dist() adjust the LDFLAGS and LIBS after pre_build has run,
because host/target env setting happens in pre_build and adjustments get
lost.
- Fix leading spaces in build env vars.
- Pass -Dcc="$CC" to the c2man metaconfig, it tries to use cc on msys2
which fails.
- Pass LDFLAGS to openssl make to fix link errors.
- Change the host_env, target_env and related functions to output a list
of commands for eval.
- Add a --host-env flag to output the host env for cross build
environments.
- Ignore symlink failures when installing dists, symlinks fail on msys2
sometimes for some reason.
- Put libicu in the list of both host and target dists only in
mingw-cross, the host libicu does not build on msys2, and everything
works fine without it.
- Add -j1 to openssl make args to disable parallel builds for the msys2
and cygwin host builds, because they fail otherwise.
- Add "-ldl -lcatgets -lws2_32" to libicu LDFLAGS for the target build,
ws2_32 may be necessary for 32 bit builds.
Older versions of mingw64 do not have the versionhelpers.h header, add
it to the dependencies submodule include/ directory and add it to
include_directories() for mingw in cmake.
Use the IsWindowsVistaOrGreater() function from VersionHelpers.h, which
fortunately is part of mingw, to check for the availability of the
comctl32 LoadIconWithScaleDown API, which we use to fix issues with the
app icon, like the icon being too big in the volume mixer.
Add -lm (the math library) to CFLAGS/CXXFLAGS/OBJCXXFLAGS/LDFLAGS and
LIBS for the cases where it is used but not explicitly linked.
Improve the sed script to override building the openal native tools as
it was failing for mingw 32 bit. Add -lm and remove flags from the
environment.
Support the gentoo crossdev mingw environment for the mingw cross
builder:
- For the cmake toolchains, add /usr/<arch>/usr to root paths, as this
is the mingw root for crossdev.
- -Wno-error=all no longer works with gcc 8.2, instead remove all
-Werror flags in dist_post_configure().
- Also remove all -I/usr/include flags in dist_post_configure().
- Don't prepend ROOT/host/bin to the PATH globally, only in
set_host_env(). This way the target config scripts are correctly found
in PATH.
- Bump openssl 1.0.2o -> 1.0.2p, cmake 3.10.3 -> 3.13.0-rc1, gd 2.2.4 ->
2.2.5 and glib 2.57.2 -> 2.58.1.
- Add libicu unicode handling library, needed by some deps. Put into the
list of dists that must be built for both the host and the target. Use
a whole bunch of patches from MSys2 for it.
- Make openssl build in parallel by using a sed script to prepend a + to
the appropriate make rules.
- Replace fontconfig EXTRA_LIBS with MAKE_ARGS: LIBS="-lintl -liconv"
because these libs were being stripped out from LIBS and LDFLAGS.
- Add V=1 VERBOSE=1 to all make invocations for extra verbosity (to see
compile/link invocations.)
- As a consequence, use dist_ninja_args() for ninja, it will still take
options in DIST_MAKE_ARGS.
- Add CONFIGURE_TYPE "cmakeninja" which is like the "cmake" type except
with -G Ninja to use the ninja generator and built with ninja. Nothing
uses this yet.
- Fix dist_patch() output for already applied patches.
- Add -L/usr/<arch>/usr/lib64 to CFLAGS/CXXFLAGS/OBJCXXFLAGS/LDFLAGS,
because crossdev libpthreads.a is in that directory and it's not in
gcc search paths. It cannot go into CPPFLAGS because those are used
for windres invocations, and windres errors out with non-cpp flags.
- Add -DMINGW_HAS_SECURE_API to all flags to fix a problem with the
mingw headers in crossdev.
- Add -lpthread to a default LIBS env var so that it's often linked last
against any libraries that may need it, at least for autoconf.
- Set the PKG_CONFIG env var to the path of the built pkg-config binary,
not exactly sure why this was necessary.
- Overhaul environment variable saving/restoring for set_host_env() so
that more variables are covered and have good host defaults.
- Add the dlfcn-win32 for mingw for dependencies that need -ldl.
- Add some MSys2 patches for fontconfig.
- Use a sed script to fix the native tools compilation when cross
compiling openal.
- Replace the fedora glib patches for mingw with MSys2 ones for the
newer glib.
- Add --with-threads=posix --disable-libelf to glib DIST_ARGS.
Build zlib before ccache so that ccache does not try to use its bundled
zlib, which does not compile cleanly on cygwin/msys2.
A couple of related PRs for ccache:
https://github.com/ccache/ccache/pull/311https://github.com/ccache/ccache/pull/310
Replace the usage of xzcat/bzcat in archive unpacking with `xz -dc` and
`bzip2 -dc` because @ZachBacon had some issues with xzcat trying to
compress instead of decompress.
When switching msys2 build modes, unset related env vars first,
sometimes they can get mixed up for some reason.
Unset UUID_LIBS when building host fontconfig, which contains
-luuid_mingw for the cross fontconfig.
Add trailing semicolons on core POST_BUILD actions.
Support building both 32 bit and 64 bit mac binaries, by passing the -32
or -64 flag just like for mingw.
Install libuuid on mac into a private path, because its uuid.h conflicts
with mac APIs when e.g. building python2.
Other improvements:
- add ccache to dists early on to not rely on the dist ccache
- update python2 version
- set python3 version to 3.6.5 until patches are updated
- TODO: rebase python3 patches
- configure cmake with --enable-ccache always
- TODO: remove all ccache optional stuff, make it required
- run cpanm through perl, because of possible issues with the script and
various paths
- support an install prefix other than /usr via DIST_PREFIX
Update the po files with the transifex client and do a msgmerge.
Replace cmake/FindGettext.cmake with the current version, and fix a bug
in it that would not allow files with multiple periods such as
zh_TW.Big5.po. Also disable msgmerge in GETTEXT_CREATE_TRANSLATIONS
otherwise it would create too many very spammy commits.
Replace language list in po/wxvbam/CMakeLists.txt (where the .pot and
.po files are) with a list made with file(GLOB ...), so that all the new
languages are pulled in.
Rename cmake script to copy .gmo files into the .app introduced in
bf4606fc from mac-localizations.cmake to mac-translations.cmake since
these are really translations and not localizations.
Add a POST_BUILD hook to run a cmake script to install translations into
the .app.
Tested to work correctly, when system language is different a
translation is loaded.
In cmake on Win32, don't try to find librt or libpthread using
find_library(), and on mingw just include -lpthread.
For some reason the msys versions of librt and libpthread were being
picked up when find_library() was being used.
Make gcc -fstack-protector-strong and associated options controlled by
the cmake option ENABLE_SSP which defaults to OFF.
This option causes a segfault on startup with gcc 8.2.0.
Remove -fpermissive from the list of flags passed to gcc and clang.
Remove -fpermissive from the cxxflags from wxWidgets config as well.
When checking wxWidgets ABI compatibility version, temporarily add
-fpermissive to compiler flags on Win32 because minhook requires it.
- Add the cross root from the mingw-w64 mac brew to the cmake toolchain
files.
- Remove strerror_r/strerror_s from ConfigManager.cpp because the
mingw-w64 brew does not support strerror_s for some reason.
- Strip the vbam executable from the builder script in the build_project
phase.
- Change the bzip2 URL to the github mirror because the bzip.org domain
expired.
- Add libuuid as it's required by the new fontconfig, use the mingw
version for mingw builds, for mingw also set UUID_LIBS to
'-luuid_mingw -luuid' in mingw.sh for fontconfig, the mingw version
is called uuid_mingw because uuid is a core win32 library.
- Lower glib version to 2.57.2 stable.
- Update wxwidgets version to current master sha.
- Fix a bug in flex-2.5.3 post_build where it tries to build flex
current but flex has been removed, and it was just rebuilding 2.5.3.
- Fix "aggressive" relocation and the relocation of .l[ao] and .pc files
in install_dist to ignore /usr/local, and only match /usr.
- Add a "project" pre_build and post_build hooks.
- Add getopt to host-only dists in mingw-cross.sh.
- Use perl instead of readlink -f to get the absolute path of the cmake
toolchain files in mingw-cross.sh, as readlink -f is linux-only.
- In mingw-cross.sh, replace the glib post_build to rebuild
gettext-target instead of gettext --without-included-glib.
- Add overridable functions set_host_env_hook and unset_host_env_hook in
mingw.sh to override in other scripts, in this case mac-cross-builder.
- Update mingw glib patches to current fedora versions.
- Add tools/win/mac-cross-builder script to build mingw windows binaries
on mac, it borrows some necessary parts from the mac native builder
for host dists, and inherits from mingw-cross.sh.
TODO: currently the resulting mac-built binary segfaults due to gcc
8.2.0, just as the msys2-built binary does, this is a separate issue.
Use find_program() to check for the existance of wx-config-gtk4, then
wx-config-gtk3 and finally wx-config, instead of calling find_package()
for each separately, FindwxWidgets module does not like being called
multiple times, it screws up some cache variables.
unset(VAR PARENT_SCOPE CACHE FORCE)
seemed to work on my version of cmake on gentoo, but does not work on
other versions.
Rewrite the function as a macro and use the syntax:
unset(VAR CACHE)
instead.
Don't eselect the wxwidgets installation for gentoo because the user may
have their own preferred version and the default should be set correctly
for the only installation.