diff options
author | Chun-wei Fan <fanchunwei@src.gnome.org> | 2020-06-16 13:41:34 +0800 |
---|---|---|
committer | Kjell Ahlstedt <kjellahlstedt@gmail.com> | 2020-06-18 11:05:55 +0200 |
commit | 628fd26818044215198c9b1bba0013996bb28e83 (patch) | |
tree | c7d8cbd3fd8a4ed0b93ed5b68beaf0e5850e2802 | |
parent | 9120803e2cfc693ff9ddc077056f0084148235c9 (diff) | |
download | sigc++-628fd26818044215198c9b1bba0013996bb28e83.tar.gz |
Rework NMake Makefiles
Clean up the NMake Makefiles so that they will become easier to maintain and
faster to run by:
* Rename instances of 'libsigcpp' to 'sigc'
* Just use 'md' directly to create all intermediate directories
* "Generate" the rules to build the example and test programs, instead of using
generic hand-written rules for all of them, as most of them share common
rules.
* Add a 'prep-git-build' rule to allow building directly from a GIT checkout
-rw-r--r-- | MSVC_NMake/Makefile.vc | 13 | ||||
-rw-r--r-- | MSVC_NMake/build-rules-msvc.mak | 61 | ||||
-rw-r--r-- | MSVC_NMake/config-msvc.mak | 3 | ||||
-rw-r--r-- | MSVC_NMake/create-lists-msvc.mak | 26 | ||||
-rw-r--r-- | MSVC_NMake/generate-msvc.mak | 42 |
5 files changed, 80 insertions, 65 deletions
diff --git a/MSVC_NMake/Makefile.vc b/MSVC_NMake/Makefile.vc index 34a4106..4657741 100644 --- a/MSVC_NMake/Makefile.vc +++ b/MSVC_NMake/Makefile.vc @@ -30,18 +30,23 @@ VALID_MSC = TRUE !if "$(VALID_MSC)" == "TRUE" +!ifdef GENERATE_VERSIONED_FILES +!include pkg-ver.mak +!endif + +all: $(LIBSIGC_LIB) examples all-build-info + # Include the Makefile portion to convert the source and header lists # into the lists we need for compilation and introspection !include create-lists-msvc.mak +!include generate-msvc.mak -all: $(LIBSIGC_LIB) $(libsigc_ex) all-build-info - +examples: $(libsigc_examples) tests: $(libsigc_tests) all-build-info -benchmark: all $(libsigc_bench) all-build-info +benchmark: all $(libsigc_benchmark) all-build-info # Include the build rules for sources, DLLs and executables -!include generate-msvc.mak !include build-rules-msvc.mak !include install.mak diff --git a/MSVC_NMake/build-rules-msvc.mak b/MSVC_NMake/build-rules-msvc.mak index 9911a47..c212de2 100644 --- a/MSVC_NMake/build-rules-msvc.mak +++ b/MSVC_NMake/build-rules-msvc.mak @@ -13,25 +13,24 @@ # $(CC)|$(CXX) $(cflags) /Fo$(destdir) /c @<< # $< # << -{..\sigc++\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp\}.obj: +{..\sigc++\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\}.obj: + @if not exist $(@D)\ md $(@D) $(CXX) $(LIBSIGCPP_CFLAGS) /Fo$(@D)\ /Fd$(@D)\ /c @<< $< << -{..\sigc++\functors\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp\}.obj: +{..\sigc++\functors\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\}.obj: + @if not exist $(@D)\ md $(@D) $(CXX) $(LIBSIGCPP_CFLAGS) /Fo$(@D)\ /Fd$(@D)\ /c @<< $< << -vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj: vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests ..\tests\testutilities.cc - $(CXX) $(SIGCPP_CFLAGS) /Fo$@ /Fd$(@D)\ /c ..\tests\testutilities.cc -# Rules for building .lib files -$(LIBSIGC_LIB): $(LIBSIGC_DLL) - -{.}.rc{vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp\}.res: +{.}.rc{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\}.res: + @if not exist $(@D)\ md $(@D) rc /fo$@ $< -{..\untracked\MSVC_NMake\}.rc{vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp\}.res: +{..\untracked\MSVC_NMake\}.rc{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\}.res: + @if not exist $(@D)\ md $(@D) rc /fo$@ $< # Rules for linking DLLs @@ -41,9 +40,11 @@ $(LIBSIGC_LIB): $(LIBSIGC_DLL) # $(dependent_objects) # << # @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2 -$(LIBSIGC_DLL): vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp $(libsigcpp_dll_OBJS) +$(LIBSIGC_LIB): $(LIBSIGC_DLL) + +$(LIBSIGC_DLL): $(sigc_dll_OBJS) link /DLL $(LDFLAGS) /implib:$(LIBSIGC_LIB) -out:$@ @<< -$(libsigcpp_dll_OBJS) +$(sigc_dll_OBJS) << @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2 @@ -55,24 +56,6 @@ $(libsigcpp_dll_OBJS) # << # @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 -{..\examples\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\}.exe: - @if not exist vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-ex $(MAKE) -f Makefile.vc CFG=$(CFG) vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-ex - @if not exist $(LIBSIGC_LIB) $(MAKE) -f Makefile.vc CFG=$(CFG) $(LIBSIGC_LIB) - $(CXX) $(SIGCPP_CFLAGS) /Fo$(@D)\libsigcpp-ex\ /Fd$(@D)\libsigcpp-ex\ $< /Fe$@ /link $(LDFLAGS) $(LIBSIGC_LIB) - @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 - -{..\tests\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\}.exe: - @if not exist $(LIBSIGC_LIB) $(MAKE) -f Makefile.vc CFG=$(CFG) $(LIBSIGC_LIB) - @if not exist vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj $(MAKE) -f Makefile.vc CFG=$(CFG) vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj - $(CXX) $(SIGCPP_CFLAGS) /Fo$(@D)\libsigcpp-tests\ /Fd$(@D)\libsigcpp-tests\ $< /Fe$@ /link $(LDFLAGS) $(LIBSIGC_LIB) vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj - @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 - -vs$(VSVER)\$(CFG)\$(PLAT)\libsigc++-benchmark.exe: ..\tests\benchmark.cc - @if not exist $(LIBSIGC_LIB) $(MAKE) -f Makefile.vc CFG=$(CFG) $(LIBSIGC_LIB) - @if not exist vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj $(MAKE) -f Makefile.vc CFG=$(CFG) vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj - $(CXX) $(SIGCPP_BENCHMARK_CFLAGS) /Fo$(@D)\libsigcpp-tests\ /Fd$(@D)\libsigcpp-tests\ ..\tests\benchmark.cc /Fe$@ /link $(LDFLAGS) $(LIBSIGC_LIB) vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj - @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 - clean: @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.exe @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.dll @@ -80,13 +63,13 @@ clean: @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.ilk @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.exp @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.lib - @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests\*.obj - @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests\*.pdb - @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-ex\*.obj - @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-ex\*.pdb - @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp\*.res - @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp\*.obj - @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp\*.pdb - @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests rd vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests - @-rd vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-ex - @-rd vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp + @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests\*.obj + @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests\*.pdb + @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc-examples\*.obj + @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc-examples\*.pdb + @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc\*.res + @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc\*.obj + @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc\*.pdb + @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests rd vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests + @-rd vs$(VSVER)\$(CFG)\$(PLAT)\sigc-examples + @-rd vs$(VSVER)\$(CFG)\$(PLAT)\sigc diff --git a/MSVC_NMake/config-msvc.mak b/MSVC_NMake/config-msvc.mak index 8783cc0..e00524f 100644 --- a/MSVC_NMake/config-msvc.mak +++ b/MSVC_NMake/config-msvc.mak @@ -32,9 +32,6 @@ LIBSIGC_LIBNAME = sigc-vc$(VSVER)0$(LIBSIGC_DEBUG_SUFFIX)-$(LIBSIGC_MAJOR_VERSIO LIBSIGC_DLL = vs$(VSVER)\$(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).dll LIBSIGC_LIB = vs$(VSVER)\$(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).lib -# Note that building the benchmark requires Boost! -libsigc_bench = vs$(VSVER)\$(CFG)\$(PLAT)\libsigc++-benchmark.exe - # If your Boost libraries are built as DLLs, use BOOST_DLL=1 in your NMake command line !ifdef BOOST_DLL SIGCPP_BENCHMARK_CFLAGS = $(SIGCPP_BASE_CFLAGS) /DBOOST_ALL_DYN_LINK diff --git a/MSVC_NMake/create-lists-msvc.mak b/MSVC_NMake/create-lists-msvc.mak index e1efb49..2691d88 100644 --- a/MSVC_NMake/create-lists-msvc.mak +++ b/MSVC_NMake/create-lists-msvc.mak @@ -35,39 +35,37 @@ NULL= # For libsigc++ -!if [call create-lists.bat header libsigcpp.mak libsigcpp_dll_OBJS] +!if [call create-lists.bat header sigc.mak sigc_dll_OBJS] !endif -!if [for %c in ($(sigc_sources_cc)) do @if "%~xc" == ".cc" @call create-lists.bat file libsigcpp.mak vs^$(VSVER)\^$(CFG)\^$(PLAT)\libsigcpp\%~nc.obj] +!if [for %c in ($(sigc_sources_cc)) do @if "%~xc" == ".cc" @call create-lists.bat file sigc.mak vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc\%~nc.obj] !endif -!if [@call create-lists.bat file libsigcpp.mak vs^$(VSVER)\^$(CFG)\^$(PLAT)\libsigcpp\sigc.res] +!if [@call create-lists.bat file sigc.mak vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc\sigc.res] !endif -!if [call create-lists.bat footer libsigcpp.mak] +!if [call create-lists.bat footer sigc.mak] !endif -!if [call create-lists.bat header libsigcpp.mak libsigc_ex] +!if [for %d in (examples tests) do @call create-lists.bat header sigc.mak libsigc_%d & @(for %s in (..\%d\*.cc) do @if not "%~ns" == "testutilities" if not "%~ns" == "benchmark" call create-lists.bat file sigc.mak vs$(VSVER)\$(CFG)\$(PLAT)\%~ns.exe) & @call create-lists.bat footer sigc.mak] !endif -!if [for %s in (..\examples\*.cc) do @call create-lists.bat file libsigcpp.mak vs^$(VSVER)\^$(CFG)\^$(PLAT)\%~ns.exe] +!if [call create-lists.bat header sigc.mak libsigc_benchmark & @for %s in (..\tests\benchmark.cc) do @(call create-lists.bat file sigc.mak vs$(VSVER)\$(CFG)\$(PLAT)\%~ns.exe) & @call create-lists.bat footer sigc.mak] !endif -!if [call create-lists.bat footer libsigcpp.mak] +!if [for %d in (examples tests) do @for %s in (..\%d\*.cc) do @if not "%~ns" == "benchmark" echo vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc-%d\%~ns.obj: %s>>sigc.mak & @echo. @if not exist ^$(@D)\ md ^$(@D)>>sigc.mak & @echo. ^$(CXX) ^$(SIGCPP_CFLAGS) /Fo^$(@D)\ /Fd^$(@D)\ ^$** /c>>sigc.mak & @echo.>>sigc.mak] !endif -!if [call create-lists.bat header libsigcpp.mak libsigc_tests] +!if [for %s in (..\tests\benchmark.cc) do @echo vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc-tests\%~ns.obj: %s>>sigc.mak & @echo. @if not exist ^$(@D)\ md ^$(@D)>>sigc.mak & @echo. ^$(CXX) ^$(SIGCPP_BENCHMARK_CFLAGS) /Fo^$(@D)\ /Fd^$(@D)\ ^$** /c>>sigc.mak & @echo.>>sigc.mak] !endif -# Skipping testutilities.cc: Not to be built as a .exe, but is a common dependency for the tests -# benchmark: Not built on default; requires Boost -!if [for %s in (..\tests\*.cc) do @if not "%~ns" == "testutilities" if not "%~ns" == "benchmark" @call create-lists.bat file libsigcpp.mak vs^$(VSVER)\^$(CFG)\^$(PLAT)\%~ns.exe] +!if [for %s in (..\examples\*.cc) do @echo vs^$(VSVER)\^$(CFG)\^$(PLAT)\%~ns.exe: ^$(LIBSIGC_LIB) vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc-examples\%~ns.obj>>sigc.mak & @echo. link ^$(LDFLAGS) ^$** /out:^$@>>sigc.mak & @echo.>>sigc.mak] !endif -!if [call create-lists.bat footer libsigcpp.mak] +!if [for %s in (..\tests\*.cc) do @if not "%~ns" == "testutilities" echo vs^$(VSVER)\^$(CFG)\^$(PLAT)\%~ns.exe: ^$(LIBSIGC_LIB) vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc-tests\%~ns.obj vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc-tests\testutilities.obj>>sigc.mak & @echo. link ^$(LDFLAGS) ^$** /out:^$@>>sigc.mak & @echo.>>sigc.mak] !endif -!include libsigcpp.mak +!include sigc.mak -!if [del /f /q libsigcpp.mak] +!if [del /f /q sigc.mak] !endif diff --git a/MSVC_NMake/generate-msvc.mak b/MSVC_NMake/generate-msvc.mak index 2569fb2..2622379 100644 --- a/MSVC_NMake/generate-msvc.mak +++ b/MSVC_NMake/generate-msvc.mak @@ -3,8 +3,40 @@ # Items in here should not need to be edited unless # one is maintaining the NMake build files. -# Create the build directories -vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp \ -vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-ex \ -vs$(VSVER)\$(CFG)\$(PLAT)\libsigcpp-tests: - @-md $@ +# Create the versioned files + +prep-git-build: pkg-ver.mak + +sigc.rc: pkg-ver.mak sigc.rc.in + @echo Generating $@... + @copy $@.in $@ + @$(PERL) -pi.bak -e "s/\@SIGCXX_MAJOR_VERSION\@/$(PKG_MAJOR_VERSION)/g" $@ + @$(PERL) -pi.bak -e "s/\@SIGCXX_MINOR_VERSION\@/$(PKG_MINOR_VERSION)/g" $@ + @$(PERL) -pi.bak -e "s/\@SIGCXX_MICRO_VERSION\@/$(PKG_MICRO_VERSION)/g" $@ + @$(PERL) -pi.bak -e "s/\@PACKAGE_VERSION\@/$(PKG_MAJOR_VERSION).$(PKG_MINOR_VERSION).$(PKG_MICRO_VERSION)/g" $@ + @$(PERL) -pi.bak -e "s/\@SIGCXX_API_VERSION\@/$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)/g" $@ + @del $@.bak + +# You may change SIGCXX_DISABLE_DEPRECATED if you know what you are doing +sigc++config.h: pkg-ver.mak ..\sigc++config.h.in + @echo Generating $@... + @copy "..\$(@F).in" "$@" + @$(PERL) -pi.bak -e "s/\#undef SIGCXX_DISABLE_DEPRECATED/\/\* \#undef SIGCXX_DISABLE_DEPRECATED \*\//g" $@ + @$(PERL) -pi.bak -e "s/\#undef SIGCXX_MAJOR_VERSION/\#define SIGCXX_MAJOR_VERSION $(PKG_MAJOR_VERSION)/g" $@ + @$(PERL) -pi.bak -e "s/\#undef SIGCXX_MINOR_VERSION/\#define SIGCXX_MINOR_VERSION $(PKG_MINOR_VERSION)/g" $@ + @$(PERL) -pi.bak -e "s/\#undef SIGCXX_MICRO_VERSION/\#define SIGCXX_MICRO_VERSION $(PKG_MICRO_VERSION)/g" $@ + @del $@.bak + +pkg-ver.mak: ..\configure.ac + @echo Generating version info Makefile Snippet... + @$(PERL) -00 -ne "print if /AC_INIT\(/" $** | \ + $(PERL) -pe "tr/, /\n/s" | \ + $(PERL) -ne "print if 2 .. 2" | \ + $(PERL) -ne "print /\[(.*)\]/" > ver.txt + @echo @echo off>pkg-ver.bat + @echo.>>pkg-ver.bat + @echo set /p sigc_ver=^<ver.txt>>pkg-ver.bat + @echo for /f "tokens=1,2,3 delims=." %%%%a IN ("%%sigc_ver%%") do (echo PKG_MAJOR_VERSION=%%%%a^& echo PKG_MINOR_VERSION=%%%%b^& echo PKG_MICRO_VERSION=%%%%c)^>$@>>pkg-ver.bat + @pkg-ver.bat + @del ver.txt pkg-ver.bat + $(MAKE) /f Makefile.vc CFG=$(CFG) GENERATE_VERSIONED_FILES=1 sigc.rc sigc++config.h |