diff options
-rw-r--r-- | MSVC_NMake/build-rules-msvc.mak | 3 | ||||
-rw-r--r-- | MSVC_NMake/config-msvc.mak | 2 | ||||
-rw-r--r-- | MSVC_NMake/install.mak | 3 | ||||
-rw-r--r-- | MSVC_NMake/meson.build | 16 | ||||
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | tools/handle-built-files.py | 43 |
6 files changed, 66 insertions, 2 deletions
diff --git a/MSVC_NMake/build-rules-msvc.mak b/MSVC_NMake/build-rules-msvc.mak index 47d385d..6097d07 100644 --- a/MSVC_NMake/build-rules-msvc.mak +++ b/MSVC_NMake/build-rules-msvc.mak @@ -31,6 +31,9 @@ $(LIBSIGC_LIB): $(LIBSIGC_DLL) {.}.rc{$(CFG)\$(PLAT)\libsigcpp\}.res: rc /fo$@ $< +{..\untracked\MSVC_NMake\}.rc{$(CFG)\$(PLAT)\libsigcpp\}.res: + rc /fo$@ $< + # Rules for linking DLLs # Format is as follows (the mt command is needed for MSVC 2005/2008 builds): # $(dll_name_with_path): $(dependent_libs_files_objects_and_items) diff --git a/MSVC_NMake/config-msvc.mak b/MSVC_NMake/config-msvc.mak index b091de0..c3d957c 100644 --- a/MSVC_NMake/config-msvc.mak +++ b/MSVC_NMake/config-msvc.mak @@ -16,7 +16,7 @@ LIBSIGC_DEBUG_SUFFIX = LIBSIGCPP_DEFINES = /DSIGC_BUILD /D_WINDLL -SIGCPP_BASE_CFLAGS = /I.. /I. /wd4530 /std:c++17 $(CFLAGS) +SIGCPP_BASE_CFLAGS = /I.. /I. /I..\untracked\MSVC_NMake /wd4530 /std:c++17 /EHsc $(CFLAGS) LIBSIGC_INT_SOURCES = $(sigc_sources_cc:/=\) LIBSIGC_INT_HDRS = $(sigc_public_h:/=\) diff --git a/MSVC_NMake/install.mak b/MSVC_NMake/install.mak index 4903a25..eea2682 100644 --- a/MSVC_NMake/install.mak +++ b/MSVC_NMake/install.mak @@ -11,4 +11,5 @@ install: all @copy /b $(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).pdb $(PREFIX)\bin @copy /b $(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).lib $(PREFIX)\lib @for %h in ($(LIBSIGC_INT_HDRS)) do @copy "..\sigc++\%h" "$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\%h" - @copy "sigc++config.h" "$(PREFIX)\lib\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\include\" + @if exist sigc++config.h copy "sigc++config.h" "$(PREFIX)\lib\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\include\" + @if exist ..\untracked\MSVC_NMake\sigc++config.h copy "..\untracked\MSVC_NMake\sigc++config.h" "$(PREFIX)\lib\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\include\" diff --git a/MSVC_NMake/meson.build b/MSVC_NMake/meson.build index 510daa4..a799535 100644 --- a/MSVC_NMake/meson.build +++ b/MSVC_NMake/meson.build @@ -15,3 +15,19 @@ import shutil shutil.copy2("@0@", "@1@") '''.format(project_build_root / 'sigc++config.h', project_build_root / 'MSVC_NMake') meson.add_postconf_script(python3.path(), '-c', cmd_py) + +untracked_msvc_nmake = 'untracked' / 'MSVC_NMake' +handle_built_files = project_source_root / 'tools' / 'handle-built-files.py' + +if not meson.is_subproject() + # Distribute built files. + # (add_dist_script() is not allowed in a subproject) + + meson.add_dist_script( + python3.path(), dist_cmd, + python3.path(), handle_built_files, 'dist_gen_msvc_files', + meson.current_build_dir(), + untracked_msvc_nmake, + project_build_root / 'sigc++config.h', meson.current_build_dir() / 'sigc.rc', + ) +endif diff --git a/Makefile.am b/Makefile.am index 76d0482..80b4136 100644 --- a/Makefile.am +++ b/Makefile.am @@ -56,6 +56,7 @@ EXTRA_DIST = \ sigc++/meson.build \ tests/meson.build \ tools/dist-cmd.py \ + tools/handle-built-files.py \ tools/tutorial-custom-cmd.py \ untracked/README diff --git a/tools/handle-built-files.py b/tools/handle-built-files.py new file mode 100644 index 0000000..d6957ef --- /dev/null +++ b/tools/handle-built-files.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +# External command, intended to be called with run_command(), custom_target(), +# meson.add_install_script() and meson.add_dist_script(). + +# argv[1] argv[2:] +# handle-built-files.py <subcommand> <xxx>... + +import os +import sys +import shutil +import subprocess +from pathlib import Path + +subcommand = sys.argv[1] + +# Invoked from meson.add_dist_script(). +def dist_built_files(is_msvc_files=False): + # argv[2] argv[3] argv[4:] + # <built_h_cc_dir> <dist_dir> <built_files>... + + # <built_h_cc_dir> is an absolute path in the build directory or source directory. + # <dist_dir> is a distribution directory, relative to MESON_DIST_ROOT. + built_h_cc_dir = sys.argv[2] + dist_dir_root = os.path.join(os.getenv('MESON_DIST_ROOT'), sys.argv[3]) + dist_dir = dist_dir_root + + # Distribute .h and .cc files built from .m4 files, or generated MSVC files. + for file in sys.argv[4:]: + if not is_msvc_files: + dist_dir = os.path.join(dist_dir_root, os.path.dirname(file)) + + # Create the distribution directory, if it does not exist. + os.makedirs(dist_dir, exist_ok=True) + + shutil.copy(os.path.join(built_h_cc_dir, file), dist_dir) + return 0 + +# ----- Main ----- +if subcommand == 'dist_gen_msvc_files': + sys.exit(dist_built_files(True)) +print(sys.argv[0], ': illegal subcommand,', subcommand) +sys.exit(1) |