From f277af5bd8ecf26a6be8f5b2a8b1ed74724771f5 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Wed, 30 Oct 2019 15:27:16 +0800 Subject: [PATCH] Add instructions on building with MSVC This includes building via NMake and Meson. --- README.MSVC.md | 137 +++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 3 +- 2 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 README.MSVC.md diff --git a/README.MSVC.md b/README.MSVC.md new file mode 100644 index 0000000..019f8a1 --- /dev/null +++ b/README.MSVC.md @@ -0,0 +1,137 @@ +Building libpsl with Visual Studio +================================== + +Building libpsl for Windows using Visual Studio 2008 or later is +supported with NMake (from release tarballs) or Meson (from GIT +checkouts). The following sections will cover building libpsl with +these methods. + +Currently, for builtin/runtime public suffix list (PSL) IDNA handling, +only ICU is supported for Visual Studio builds. + +Using NMake (from a release tarball) +=========== +You will need a Python 2.7.x or later installation in order to +complete the build successfully. + +You will need the ICU (International Components for Unicode) +libraries, headers and DLLs, to build libpsl, unless both +DISABLE_BUILTIN=1 and DISABLE_RUNTIME=1 are passed into the NMake +command line as listed below. + +You can also buid libpsl with libiconv and gettext support, please +see the options below for enabling such support. + +In a Visual Studio command prompt which matches your desired +configuration (x86/Win32, x64 etc.), +go to $(srcroot)\msvc, and issue the following command: + +nmake /f Makefile.vc CFG=[debug|release] + +A 'test' target is provided to build the test programs, while a +'clean' target is provided to remove all the compiled and generated +files for the build. An 'install' target is provided to copy the +build PSL DLL, .lib and executables, as well as the related PDB files +and libpsl header, into appropriate locations under PREFIX (please see +below). + +This will build the libpsl DLL/LIB and the psl.exe utility in the +$(CFG)\$(ARCH) subdirectory, where ARCH is Win32 for 32-bit builds +and x64 for 64-bit (x86_64) builds. + +A number of options can be passed into the NMake command, as follows. +Enable by setting each option to 1, unless otherwise indicated: + +* PSL_FILE: Location of the PSL data file, which is retrieved from + https://publicsuffix.org/list/public_suffix_list.dat, + or some other custom location (not supported). Default + is in $(srcroot)\list\public_suffix_list.dat. This is + needed to generate the suffixes_dafsa.h header required + for the build, as well as the binary and ascii dafsa + files used for the test programs. + +* TEST_PSL_FILE: Location of the test PSL file. Default is in + $(srcroot)\list\tests\tests.txt. This is + required for building and running the test + programs. + +* STATIC: Set if building static versions of libpsl is desired. + +* USE_LIBTOOL_DLLNAME: Set to use libtool-style DLL naming. + +* DISABLE_RUNTIME: Do not use ICU to generate runtime PSL data. + +* DISABLE_BUILTIN: Do not use ICU to generate builtin PSL data. + +* USE_ICONV: Enable libiconv support, requires libiconv. + +* USE_GETTEXT: Enable gettext support for displaying i18n messages. + Implies USE_ICONV, and requires gettext-runtime. + +* PYTHON: Full path to a Python 2.7.x (or later) interpreter, if not + already in your PATH. + Required to generate DAFSA headers and data files that is + needed for the build, as well as generating pkg-config + files for NMake builds. + +* PREFIX: Base installation path of the build. Note that any dependent + libraries are searched first from the include\ and lib\ + sub-directories in PREFIX before searching in the paths + specified by %INCLUDE% and %LIB%. Default is + $(srcroot)\..\vsX\$(PLATFORM), where X is the release version + of Visual Studio, such as 9 for 2008 and 16 for 2019, + $(PLATFORM) is the target platform (Win32/x64) of the build. + +Building libpsl with Meson +========================== +Building using Meson is now supported for Visual Studio builds from a +GIT checkout. + +Besides the requirements listed in the NMake builds, you will also need + +* Python 3.5.x or later +* Meson build system, use PIP to install from Python 3.5.x64 +* Ninja build tool (if not involking Meson with --backend= + vs[2010|2015|2017|2019]) +* A compatible PSL data file and a test PSL data file. You may + consider using the ones shipped with the latest libpsl release + tarball and place the PSL data file in $(srcroot)/list and the + test PSL data file in $(srcroot)/list/tests. You may also choose + to download the latest PSL data file from + https://publicsuffix.org/list/public_suffix_list.dat and place it + it $(srcroot)/list. Alternatively, specify + -Dpsl_file= and/or + -Dpsl_testfile= when invoking Meson. + +Open a Visual Studio command prompt and enter an empty build directory. + +Your Python interpreter, Meson executable script and Ninja (if used) +need to be in your PATH. + +Any dependent libraries that are being used should have their headers +found in paths specified by %INCLUDE% and their .lib files in the +paths specified by %LIB%. + +In the empty build directory, run the following: + +meson --buildtype=... --prefix= [--backend=vs[2010|2015|2017|2019]] + +Please see the Meson documentation for the values accepted by +--buildtype. --backend=vsXXXX generates the corresponding versions +of the Visual Studio solution files to build libpsl, which +will elimnate the need to have the Ninja build tool installed. + +When the Meson configuration completes, run 'ninja' or open the +generated solution files with Visual Studio and build the projects +to carry out the build. Run 'ninja test' or the test project to +test the build and run 'ninja install' or 'ninja install' to +install the build results. + +If building with Visual Studio 2008, run the following after running +'ninja install' in your builddir: + +for /r %f in (*.dll.manifest) do if exist $(prefix)\bin\%~nf mt /manifest %f /outputresource:$(prefix)\bin\%~nf;2 + +for /r %f in (*.exe.manifest) do if exist $(prefix)\bin\%~nf mt /manifest %f /outputresource:$(prefix)\bin\%~nf;1 + +So that the application manifests get properly embedded. \ No newline at end of file diff --git a/README.md b/README.md index 741a2a6..c6736dd 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,8 @@ If you prefer a `meson` build ninja -C builddir ninja -C builddir test -There is also an unofficial MSVC nmake build configuration in `msvc/`. +There is also an unofficial MSVC nmake build configuration in `msvc/`. Please +see README.MSVC.md on building libpsl with Visual Studio via NMake or Meson. Mailing List