Since demos.h is now generated according to the platform for which GTK+ is
built, don't distribute it. Generate a Windows-specific demos.h.win32 and
distribute that instead, in which the Visual Studio build files will copy
it to demos.h, so that the build will proceed normally.
https://bugzilla.gnome.org/show_bug.cgi?id=749622
Without this change, out-of-tree distcheck doesn't get very far.
Similarly, allow *.vcxproj, *.props to be in either the builddir or
the srcdir.
Finally, since I'm touching these lines anyway, eliminate some
useless uses of cat: "cat x | sed 's/foo/bar/' > y" is
equivalent to "sed 's/foo/bar/' < x > y".
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=748176
Reviewed-by: Chun-wei Fan <fanchunwei@src.gnome.org>
Make use of pattern rules when generating the Visual Studio 2012/2013
Projects from the Visual Studio 2010 projects, which will help to clean up
the file and also avoid problems when running items like 'make -jN dist'.
The current GdkScreen->is_composited() is a stub as we were having Windows
XP being supported, which does not support Desktop Window Manager (DWM),
which is used by Windows for composition.
Windows Vista and later support DWM, and it is always enabled on Windows 8/
Server 2012 and later.
Please note that as we are dropping XP support in this cycle, this is the
commit that would say goodbye to Windows XP support for GTK+-3.x, by
linking directly to dwmapi.dll. This means, we only check whether we are
on Windows 8 or Server 2012 (or later) to see whether we unconditionally
have composition enabled.
https://bugzilla.gnome.org/show_bug.cgi?id=741849
"Install" the .pdb files that were generated along with the build, to make
it easier for people to develop and debug GTK+, especially when used as a
stack, and as the .pdb files are already generated with all builds.
Also make the copy of the .dll, .lib and .exe files more selective so that
we do not accidently copy files that are not meant to be "installed", or
end up making extra copies of plugin DLLs in the wrong places, when the
projects here are included as a part of a grand solution that is used to
build the entire GTK+ stack, for example.
For Visual Studio 2010 and later, the .pdb filename needs to be explicitly
specified so that it will match the filename of the target, if the project
name differs from the filename of the target. Make sure that is the case
for the 3 DLLs that we build for Visual Studio 2010 and later.
Use the /MP compiler option, where the build time for release builds can
be cut down by quite a bit. This will however cause a brief warning with
debug builds due to the use of /Gm, but the code will otherwise build
normally. Unlike the Visual Studio 2010+ builds, we can't use /d2Zi+ as
Visual Studio 2008 does not support that, so we can't get a better
debugging experience for release builds here.
Use Multiprocessor compilation which can cut down build times by quite a
bit and use the /d2Zi+ flag to have better debugging info being logged to
the .pdb for release builds.
These are only applicable for Visual Studio 2010/2012 and later.
Rename the "install" projects as "gtk-install" as we are planning to have a
grand solution file that incorporates all project files of the GTK+ stack
with their dependencies, to make it easier for people to build GTK+ from
scratch from a stock installation of Visual Studio 2008 and later.
Since the support for GL support in the GDK Windows backend has landed in
master, we need to build it in the Visual Studio builds. Update the
projects for that and "install" the public header that was added.
As the print preview command is moved into the sources, don't define it in
the preprocessor definitions. However, define the
GTK_PRINT_BACKEND_ENABLE_UNSUPPORTED in the preprocessor definitions, to
make the build in-line with the autotools builds.
The files for build of GtkInspector have been intergrated into the build of
the main GTK+ DLL, and the Visual Studio project templates for those have
been removed as well. Make that removal complete by removing from the
solution files references to it and make the 'gtk' project not to depend on
the gtk-inspector project.
...for Broadway builds, as it was producing a wrongly-named check file for
that configuration, so that a clean would not be correctly performed and
subsequently affected rebuilds.
The gtkglarea and sidebar demos have been added, so build them in the
projects. Note that the gtkglarea code is not usable under Windows at this
point as implementation is needed for the GDK-Win32 backend.
Patches have been submitted to the libepoxy project so that it can be built
under Visual Studio. This will allow the GDK, GTK and gtk3-demo projects
to build, but the gtkglarea code is not usable at this time as
implementation needs to be added to the GDK-Win32 backend for it.
"Install" gdkbroadwaydisplay.h, as it is a public header of GDK Broadway,
also fix the MSVC 2010+ gtk-copy-gdk-broadway.props property sheet as a
'>' is missing. Sorry for not noting these issues earlier, as MSVC
Broadway builds were recently restored. My bad :|
There is now a broadway-buffer.c source that needs to be built for this, so
add it into the projects. Since crypt() is no longer used, don't include
crypt.c in the builds, and so clean up the projects a bit.
Tell people that they need to download and install the Adwaita icon theme,
by following the instructions given on
https://live.gnome.org/GTK%2B/Win32/MSVCCompilationOfGTKStack.
Also tell people they can either use IJG JPEG or libjpeg-turbo for non-GDI+
builds of GDK-Pixbuf.
This updates the property sheets that are used to "install" builds of GTK+
after the libraries and the gtk3-demo programs are built. Note that these
are generated with scripts in regards to the headers part, so that we can
move the header installation part to use autocompletion by the autotools
build files in the next dev cycle or so, like the "gdk" and "gtk" project
files.
Make the Visual C++-related build files contain the actual GTK+ version, by
generating them during the configure stage and dist'ing them in the release
tarballs. This is especially important for builds of introspection files,
as one may need to look at the release version of GTK+ in those files.
Define ISOLATION_AWARE_ENABLED for the build of the GTK DLL so that visual
style can be applied to the Windows print dialog for all applications using
gtkprintoperation.
Update the script for the generation of gtk-win32.rc for MSVC to not try to
embed the manifest from it (but embed libgtk3.manifest by including it in
the project files, as we are now doing), and embedding the manifest file is
really not supported in MSVC 2010 and later.
Also fix up formatting in the GTK DLL projects.
https://bugzilla.gnome.org/show_bug.cgi?id=733773
Use the Python script that was used to create gtk-win32.rc from
gtk-win32.rc.in to similarly create libgtk3.manifest. As the wildcard
character can be used for all architectures, use that.
The libgtk3.manifest file needs to be specified explicitly in the projects,
so that it will be recognized and built into the GTK dll, so update the
project files as well on this part.
https://bugzilla.gnome.org/show_bug.cgi?id=733773
This utility would likely be useful for Windows builds of GTK+, given the
reasons Alex cited for coming up with this utility[1], and MSVC build
support for librsvg is not available at this time (possible, but not
implemented yet).
[1]: https://bugzilla.gnome.org/show_bug.cgi?id=730450
In bug 733773, gtk-win32.rc was removed from the dist in the attempt to
make the print dialog on Windows themed, so this script was added so that
the gtk-win32.rc file can be generated during the Visual Studio builds of
GTK+ from the autotools scripts. This is also intended for filling in the
arch of the build for MSVC builds for the manifest that is also required
for fixing bug 733773. Python is used as it is already needed for
This is done as a custom build rule in the Visual Studio projects so that
it is easy to clean and rebuild gtk-win32.rc upon an update.
https://bugzilla.gnome.org/show_bug.cgi?id=733773
Like the autotools builds of the introspection files, don't include gtkx.h
in the introspection prepropcessing as it should not be included by other
GTK+ headers.
We need to enclose paths containing $(BinDir) with double quotes as it
points to something like c:\foo\gtk+-x.yy.zz, which the copy command on
Windows does not like "+" in paths unless enclosed in quotes.
As the Visual Studio 2012/2013 are only slightly different from the Visual
Studio 2010 projects, we can provide support for them by using scripts to
copy the Visual Studio 2010 projects, and update the specific parts as
necessary.
Thus, there would be little maintenance overhead for these as only the 2010
projects need to be kept up-to-date as a result. This might change when we
do get the stack working with WinRT/Metro, but that's going to be another
totally different issue.
The stock icons are now built into the GTK+ DLL via resources, so don't
try to install the stock icons, and the icons don't reside in their former
positions anymore, causing messages indicating that the files cannot be
found.
This reverts commit 2e0ce67f8a.
Since g-i 1.40.0 we are using the .lib file(s) to determine the DLL(s) that
the introspection files should look for, instead of directly using the
DLL(s) directly, so it is no longer necessary to make copies of the GDK
.lib file to match the <namespace-name>-<namespace-version> convention when
we are building the introspection files for GdkWin32. Remove that from the
introspection build process as a result.
Copy the icons in stock_icons accordingly, so that the built-in icons can
be found by GTK, as it seems that not all of them are built into
gtkbuiltincache.h.
The a11y headers are now listed with the main Makefile.am of GTK, and
GDK introduced deprecated headers, so we need to account for them for the
build of the introspection files.
Currently, due to the way that Visual Studio 2010+ projects are handled,
the "install" project does not re-build upon changes to the sources, as it
does not believe that its dependencies have changed, although the changed
sources are automatically recompiled. This means that if a part or more
of the solution does not build, or if the sources need some other fixes
or enhancements, the up-to-date build is not copied automatically, which
can be misleading.
Improve on the situation by forcing the "install" project to trigger its
rebuild, so that the updated binaries can be copied. This does trigger an
MSBuild warning, but having that warning is way better than not having an
up-to-date build, especially during testing and development.
Like the GDK and GTK portions, use autotools scripts to generate the
complete projects for gtk-inspector as sources there seem to change from
time to time.
It might be so that this, like the a11y sources, will be referenced from
the main Makefile.am of GTK directly, but just do this so that the
projects can build properly.
Add project files to build the GtkInspector sources, as gtk-inspector is a
required portion for GTK+. "Install" the
org.gtk.Settings.Debug.gschema.xml gsettings schema file as well, so that
people can trigger GtkInspector as they develop and test their GTK+-based
programs.
Add support to build the introspection files for GdkWin32, as done recently
in the autotools builds and clean up the NMake Makefile for building the
introspection files a bit.
For some reason, gdk_win32_display_manager_get_type() was not exported in
gdk-3.0.lib, force its export, so that the GdkWin32-3.0.gir can be built
properly with the Visual C++ builds. This is a known problem that some
symbols in static libraries that are linked into a DLL in Visual C++, even
if they were marked with __declspec(dllexport) via _GDK_EXTERN.
GObject-Introspection was recently changed to support acquiring the name of
the DLL from a library (.lib, etc) that was passed into g-ir-scanner on
Windows, like the *nix builds, instead of directly passing in the name of
the DLL.
This updates the introspection build process, so that introspection files
for GTK+ can continue to be properly built.
Add some flexibility in the property sheets for one building GTK+ that it
also searches for a settable installation path of Python, in addition to
searching the PATH for an installation of the Python interpretor. This
currently defaults to Python 2.7.x, which is normally installed in
c:\python27 on Windows by default. Also tell people in the README.txt's
for the Visual Studio builds
This is needed to show the gtk3-demo icon and is needed for the "Multiple
Views" demo to work. Hmm, why couldn't I do a for loop for a batch in a
property sheet ? :|
Rename testsrules_msvc.mak to detectenv_msvc.mak and remove some package-
specific stuff from it, to reflect on the nature that this NMake Makefile
is shared.
The current approach of building the introspection files for GTK works, but
is often cumbersome as one needs to set many environmental variables before
launching a solution file, which runs a Windows batch script to generate
the .gir/.typelib files. It was also possible to hand-run the batch script
from the Visual Studio command prompt, but even more environmental
variables need to be set.
This changes the approach to build the introspection files using an NMake
Makefile (but elimating from the Visual Studio Project Files the part to
build the introspection files) to:
-Make it clearer to the person building the introspection files what
environmental variables are needed, specifically for PKG_CONFIG_PATH and
MINGWDIR and CFG (formerly CONF). Setting stuff like VSVER, PLAT and BASEDIR
is no longer required, which was a bit clunky.
-Allows some more easier flexibility on the build of the intropsection files.
Make sure the needed public headers for GTK master is "installed", and re-
order some items so that it is easier when the headers lists are
automatically acquired from the various Makefile.am's.
Add a utility project to get config.h and gdkconfig.h from their *.h.win32
(or win32_broadway, if applicable) counterparts, using custom build rules,
so that these "generated" files can also be removed on clean and
"regenerated" upon update. This also enables the removal of configs in
certain projects that isn't really needed as a result.
Also update and merge the projects and property sheets to include a single
property sheet that it needs, which will then in turn include the other
property sheets that is needed, so that things are cleaner.
Add a utility project to get config.h and gdkconfig.h from their *.h.win32
(or win32_broadway, if applicable) counterparts, using custom build rules,
so that these "generated" files can also be removed on clean and
"regenerated" upon update. This also enables the removal of configs in
certain projects that isn't really needed as a result.
Also update and merge the projects and property sheets to include a single
property sheet that it needs, which will then in turn include the other
property sheets that is needed, so that things are cleaner.
Updates to the Visual Studio 2010 projects will follow later.
...for all files except the README.txt and the .sln files, which have to
have DOS/Windows line endings. This makes application of patches, when
applicable, easier.
Since commit 7c2a5072 the gtkdbusgenerated.[c|h] are not included in the
dist tarball and thus have to be generated, which broke the Visual C++
builds.
This patch adds property sheets and custom build rules for the Visual C++
projects so that gtkdbusgenerated.[c|h] will be generated upon building the
GTK+ DLL sources.
This also tells people building GTK+ from the projects that they need to
have Python 2/3 installed and the Python interpretor needs to be in their
PATH before building GTK+ from the projects.
-Improve optimization a bit for broadwayd, by enabling link time code
generation
-Add PlatformToolset tag for the Visual C++ 2010 projects, to ease
transition to Visual C++ 2012/2013
Improve optimization, by re-enabling WholeProgramOptimization but changing
the linker optimization to not drop items that are not referenced in code
(such as compiled gresource sources that are not directly referenced in
code, as they are still needed for the demos to run properly).
Like the install projects that were fixed few days ago, the gengir projects
did not have info on the intermediate and output directories as a result of
the split up of the property sheets. Fix this by including the appropriate
property sheet in the gtk-gengir property sheet so that we can avoid
confusing messages from Visual Studio on whether to reload the gengir
project as it was modified, at least on 2008.
Due to the split up of the property sheets, the install projects did not
have info on the Intermediate and Output Paths, which caused confusing
messages from Visual Studio to show up upon completing build+"install" and
closing Visual Studio on whether to reload the install project, at least on
Visual Studio 2008.
Also clean up the Visual Studio 2008 install project a bit.
Include the property sheet which defines these properties to fix this.
We need to copy the GDK .lib/.dll from Release_Broadway\<Platform>\bin
or Debug_Broadway\<Platform>\bin to Release\<Platform>\bin or
Debug\<Platform>\bin respectively during the build of Broadway flavors of
GDK, as the MSVC introspection builds expects the GDK .lib/.dll to be
in Release\<Platform>\bin or Debug\<Platform>\bin.
Use a new property sheet to do so for Broadway builds of GDK-during the
builds of Win32-only GDK, the broadway builds of the GDK .lib/.dll would
be cleared out prior to the build of the Win32-only GDK.
-For the binary "installation", look for the DLL files with their file
names consistent with the ones that are generated with the respective
Visual Studio projects.
-Remove any stray GDK DLLs that were left over from a Broadway-enabled
GDK when building a non-Broadway-enabled GTK+ binary set.
Update the gtk-install-bin property sheets so that it does not "install"
the wrong GDK DLL/LIB when building a broadway-enabled GDK
when the non-Broadway GDK had been previously built.
Add the Visual Studio 2010 projects to build the GDK Broadway backend, just
like the Visual Studio 2008 project files in the last commit. Similarly,
split up the property sheets so that they are easier to maintain and can
be made more flexible for different build types. Also remove some unneeded
stuff from some of these items.
Also, fix the filter file completion for GTK, as a source file was excluded
for that and this was overlooked as it seemingly did not cause any trouble.
-Add Visual Studio 2008 projects and pre-configured gdkconfig.h for
Broadway builds
-Decouple the Visual Studio property sheets, to simplify maintenance and
enhance flexibility for different builds
Visual Studio 2010 projects updates will follow later.
This adds a crypt(3) implementation for use with broadwayd as Visual Studio
does not support crypt(3) out of the box.
The public domain implementation is taken from the following URL,
http://michael.dipperstein.com/crypt/, where AFAICT this implementation
would not be subject to licensing restrictions that would prevent it from
being bundled.
-Update the pre-configured config.h.win32(.in) to define _GDK_EXTERN as
__declspec (dllexport) as we are not using .def files to export symbols
anymore.
-Update the GDK/GTK DLL projects and the property sheets to stop using
the .symbols/.def files
-Update the property sheets to "install" the newly-introduced GTK headers
-Update the gtk3-demo project to build the new demo sources that must be
built
Add a PlatformToolset tag for each configuration for project files that
do not yet have them. This is to ease support for Visual Studio 2012 as
we can copy and easily replace a few items with automated scripts as
project files for Visual Studio 2010 and 2012 are very similar.
This might change when we eventually support the Metro (aka Windows 8
Modern UI), but this will suffice for the time being.