summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChun-wei Fan <fanchunwei@src.gnome.org>2020-06-16 13:41:34 +0800
committerKjell Ahlstedt <kjellahlstedt@gmail.com>2020-06-18 11:05:55 +0200
commit628fd26818044215198c9b1bba0013996bb28e83 (patch)
treec7d8cbd3fd8a4ed0b93ed5b68beaf0e5850e2802
parent9120803e2cfc693ff9ddc077056f0084148235c9 (diff)
downloadsigc++-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.vc13
-rw-r--r--MSVC_NMake/build-rules-msvc.mak61
-rw-r--r--MSVC_NMake/config-msvc.mak3
-rw-r--r--MSVC_NMake/create-lists-msvc.mak26
-rw-r--r--MSVC_NMake/generate-msvc.mak42
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