summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChun-wei Fan <fanchunwei@src.gnome.org>2021-07-09 12:38:50 +0800
committerChun-wei Fan <fanchunwei@src.gnome.org>2021-07-09 16:11:05 +0800
commit0c95ce402711212fc5857952b7e35c91ced63f5f (patch)
treee9ca268dada1d863fedd6dd4732eb11c1919c618
parent99ff42314494af1d4ee2ab599c572cb3723408c7 (diff)
downloadlibrsvg-0c95ce402711212fc5857952b7e35c91ced63f5f.tar.gz
NMake Makefiles: Update for cargo-c usage
This updates the Visual Studio build files to build librsvg after it has been updated to use cargo-c to build the C libraries, and, as a side-effect, static builds are now supported as well at the same time. As a convenience, we still provide rsvg-2.0-vsXX.dll resulting from the builds for people that aren't able to re-link their applications against rsvg-2.dll (the DLL file name that results from the cargo-c updates), but a warning message is shown upon 'install' that people are advised to re-compile their applications if possible, since rsvg-2.0.lib now links to rsvg-2.dll.
-rw-r--r--win32/Makefile.vc2
-rw-r--r--win32/build-rules-msvc.mak30
-rw-r--r--win32/config-msvc.mak.in4
-rw-r--r--win32/create-lists-msvc.mak9
-rw-r--r--win32/generate-msvc.mak14
-rw-r--r--win32/install-msvc.mak21
-rw-r--r--win32/pc_base.py13
-rw-r--r--win32/rsvg-rust.mak14
-rw-r--r--win32/rsvgpc.py9
9 files changed, 55 insertions, 61 deletions
diff --git a/win32/Makefile.vc b/win32/Makefile.vc
index 80d27c0a..3f96cfef 100644
--- a/win32/Makefile.vc
+++ b/win32/Makefile.vc
@@ -32,7 +32,7 @@ VALID_MSC = TRUE
# Include the Makefile portion to convert the source and header lists
# into the lists we need for compilation and introspection
-all: $(RSVG_TOOLS) $(EXTRA_TARGETS) build-info-librsvg
+all: $(LIBRSVG_LIB) $(RSVG_TOOLS) $(EXTRA_TARGETS) build-info-librsvg
# Include the build rules for Rust builds, sources, DLLs and executables
!include rsvg-rust.mak
diff --git a/win32/build-rules-msvc.mak b/win32/build-rules-msvc.mak
index a1ec221c..7af562df 100644
--- a/win32/build-rules-msvc.mak
+++ b/win32/build-rules-msvc.mak
@@ -13,13 +13,9 @@
# $(CC)|$(CXX) $(cflags) /Fo$(destdir) /c @<<
# $<
# <<
-{$(OUTDIR)\librsvg\}.c{$(OUTDIR)\librsvg\}.obj:
- $(CC) $(LIBRSVG_CFLAGS) $(LIBRSVG_INCLUDES) /Fo$(@D)\ /Fd$(@D)\ /c @<<
-$<
-<<
-
{..\gdk-pixbuf-loader\}.c{$(OUTDIR)\rsvg-gdk-pixbuf-loader\}.obj:
@if not exist $(@D)\ mkdir $(@D)
+ @if not exist $(@D)\..\librsvg mkdir $(@D)\..\librsvg
@if not exist $(@D)\..\librsvg\config.h copy .\config.h.win32 $(@D)\..\librsvg\config.h
$(CC) $(RSVG_PIXBUF_LOADER_CFLAGS) $(TOOLS_DEP_INCLUDES) /Fo$(@D)\ /Fd$(@D)\ /c @<<
$<
@@ -27,6 +23,7 @@ $<
{..\tests\}.c{$(OUTDIR)\rsvg-tests\}.obj:
@if not exist $(@D)\ mkdir $(@D)
+ @if not exist $(@D)\..\librsvg mkdir $(@D)\..\librsvg
@if not exist $(@D)\..\librsvg\config.h copy .\config.h.win32 $(@D)\..\librsvg\config.h
$(CC) $(TEST_CFLAGS) $(LIBRSVG_LOG_DOMAIN) $(TOOLS_DEP_INCLUDES) /Fo$(@D)\ /Fd$(@D)\ /c @<<
$<
@@ -42,16 +39,16 @@ $(LIBRSVG_LIB): $(LIBRSVG_DLL)
# $(dependent_objects)
# <<
# @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
-$(LIBRSVG_DLL): $(RSVG_INTERNAL_LIB) $(librsvg_OBJS) $(LIBRSVG_DEF)
- link /DLL $(LDFLAGS) $(LIBRSVG_DEP_LIBS) \
- /implib:$(LIBRSVG_LIB) \
- -out:$@ /def:$(LIBRSVG_DEF) @<<
-$(librsvg_OBJS)
-<<
- @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
+$(LIBRSVG_DLL): $(RSVG_INTERNAL_LIB)
+ @copy /b $(RSVG_INTERNAL_LIB:.dll.lib=.dll) $(OUTDIR)
+ @copy /b $(RSVG_INTERNAL_LIB:.dll.lib=.dll) $@
+ @copy /b $(RSVG_INTERNAL_LIB:.dll.lib=.lib) $(OUTDIR)\rsvg-2-static.lib
+ @copy /b $(RSVG_INTERNAL_LIB) $(OUTDIR)\rsvg-2.0.lib
+ @copy /b $(RUST_OUTDIR)\rsvg_2.pdb $(OUTDIR)
+ @copy /b $(RUST_OUTDIR)\librsvg-2.0.pc $(OUTDIR)
$(GDK_PIXBUF_SVG_LOADER): \
-$(LIBRSVG_LIB) \
+$(RSVG_INTERNAL_LIB) \
$(OUTDIR)\rsvg-gdk-pixbuf-loader\io-svg.obj
link /DLL $(LDFLAGS) $** $(BASE_DEP_LIBS) /out:$@
@-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
@@ -79,7 +76,7 @@ $(rsvg_tests):
@-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1
!ifdef INTROSPECTION
-$(OUTDIR)\Rsvg-$(RSVG_API_VER).gir: $(LIBRSVG_LIB) $(OUTDIR)\librsvg\Rsvg_2_0_gir_list
+$(OUTDIR)\Rsvg-$(RSVG_API_VER).gir: $(RSVG_INTERNAL_LIB) $(OUTDIR)\librsvg\Rsvg_2_0_gir_list
@-echo Generating $@...
@set PATH=$(BINDIR);$(PATH)
$(PYTHON) $(G_IR_SCANNER) \
@@ -87,7 +84,7 @@ $(OUTDIR)\Rsvg-$(RSVG_API_VER).gir: $(LIBRSVG_LIB) $(OUTDIR)\librsvg\Rsvg_2_0_gi
--namespace=Rsvg \
--nsversion=2.0 \
--pkg=pango --extra-library=libxml2 \
- --library=rsvg-2.0 \
+ --library=$(RSVG_INTERNAL_LIB:.dll.lib=.dll) \
--add-include-path=$(G_IR_INCLUDEDIR) \
--include=GLib-2.0 --include=GObject-2.0 \
--include=Gio-2.0 --include=cairo-1.0 \
@@ -124,9 +121,6 @@ clean:
@-del /s /q $(OUTDIR)\rsvg-gdk-pixbuf-loader\*.obj
@-del /s /q $(OUTDIR)\rsvg-gdk-pixbuf-loader\*.pdb
@-del /s /q $(OUTDIR)\librsvg\Rsvg_2_0_gir_list
- @-del /s /q $(OUTDIR)\librsvg\*.obj
- @-del /s /q $(OUTDIR)\librsvg\*.pdb
- @-del /s /q $(OUTDIR)\librsvg\_rsvg_dummy.c
@-del /s /q $(OUTDIR)\librsvg\config.h
@-rmdir /s /q $(OUTDIR)\output
@-rmdir /s /q output
diff --git a/win32/config-msvc.mak.in b/win32/config-msvc.mak.in
index 4c42f753..b71b09a3 100644
--- a/win32/config-msvc.mak.in
+++ b/win32/config-msvc.mak.in
@@ -106,7 +106,8 @@ TEST_DEP_LIBS = \
fontconfig.lib
!endif
-RSVG_INTERNAL_LIB = $(OUTDIR)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\librsvg.lib
+RUST_OUTDIR = $(OUTDIR)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)
+RSVG_INTERNAL_LIB = $(RUST_OUTDIR)\rsvg-2.dll.lib
LIBRSVG_DEP_LIBS = \
$(RSVG_INTERNAL_LIB) \
@@ -133,7 +134,6 @@ LIBRSVG_DLL_FILENAME = $(OUTDIR)\rsvg-$(RSVG_API_VER)-vs$(VSVER)
LIBRSVG_DLL = $(LIBRSVG_DLL_FILENAME).dll
LIBRSVG_LIB = $(OUTDIR)\rsvg-$(RSVG_API_VER).lib
-LIBRSVG_DEF = $(OUTDIR)\librsvg\librsvg.def
GDK_PIXBUF_SVG_LOADER = $(OUTDIR)\libpixbufloader-svg.dll
diff --git a/win32/create-lists-msvc.mak b/win32/create-lists-msvc.mak
index 97087fdf..6fb7ffc3 100644
--- a/win32/create-lists-msvc.mak
+++ b/win32/create-lists-msvc.mak
@@ -44,15 +44,6 @@ NULL=
!if [call create-lists.bat footer rsvg_objs.mak]
!endif
-!if [call create-lists.bat header rsvg_objs.mak librsvg_OBJS]
-!endif
-
-!if [for %c in ($(OUTDIR)\librsvg\_rsvg_dummy.c) do @if "%~xc" == ".c" @call create-lists.bat file rsvg_objs.mak ^$(OUTDIR)\librsvg\%~nc.obj]
-!endif
-
-!if [call create-lists.bat footer rsvg_objs.mak]
-!endif
-
!if [call create-lists.bat header rsvg_objs.mak rsvg_tests]
!endif
diff --git a/win32/generate-msvc.mak b/win32/generate-msvc.mak
index 2acbd65a..fbf4b52b 100644
--- a/win32/generate-msvc.mak
+++ b/win32/generate-msvc.mak
@@ -3,18 +3,8 @@
# Items in here should not need to be edited unless
# one is maintaining the NMake build files.
-$(OUTDIR)\librsvg\_rsvg_dummy.c:
- @echo Generating dummy source file...
- @if not exist $(@D)\ mkdir $(@D)
- echo static int __rsvg_dummy; > $@
-
-$(OUTDIR)\librsvg\librsvg.def: .\librsvg.symbols
- @echo Generating $@...
- @if not exist $(@D)\ mkdir $(@D)
- @echo EXPORTS>$@
- $(CC) /EP $**>>$@
-
# Generate listing file for introspection
$(OUTDIR)\librsvg\Rsvg_2_0_gir_list: $(librsvg_real_pub_HDRS)
+ @if not exist $(@D)\ mkdir $(@D)
@if exist $@ del $@
- @for %%s in ($**) do echo %%s >> $@
+ @for %%s in ($**) do @echo %%s >> $@
diff --git a/win32/install-msvc.mak b/win32/install-msvc.mak
index 0b541bd9..09416830 100644
--- a/win32/install-msvc.mak
+++ b/win32/install-msvc.mak
@@ -5,8 +5,10 @@ install: all
@if not exist $(PREFIX)\bin\ mkdir $(PREFIX)\bin
@if not exist $(PREFIX)\lib\gdk-pixbuf-2.0\2.10.0\loaders\ mkdir $(PREFIX)\lib\gdk-pixbuf-2.0\2.10.0\loaders
@if not exist $(PREFIX)\include\librsvg-$(RSVG_API_VER)\librsvg @mkdir $(PREFIX)\include\librsvg-$(RSVG_API_VER)\librsvg
- @for %%x in (dll pdb) do @copy /b $(LIBRSVG_DLL_FILENAME).%%x $(PREFIX)\bin
+ @copy /b $(OUTDIR)\rsvg-2*.dll $(PREFIX)\bin
+ @copy /b $(OUTDIR)\rsvg_2.pdb $(PREFIX)\bin
@copy /b $(LIBRSVG_LIB) $(PREFIX)\lib
+ @copy /b $(LIBRSVG_LIB:-2.0=-2-static) $(PREFIX)\lib
@for %%x in (dll pdb) do @copy /b $(OUTDIR)\libpixbufloader-svg.%%x $(PREFIX)\lib\gdk-pixbuf-2.0\2.10.0\loaders
@copy $(OUTDIR)\rsvg-convert.exe $(PREFIX)\bin
@-copy $(OUTDIR)\rsvg_convert.pdb $(PREFIX)\bin
@@ -21,7 +23,16 @@ install: all
@if exist $(OUTDIR)\Rsvg-$(RSVG_API_VER).gir copy $(OUTDIR)\Rsvg-$(RSVG_API_VER).gir $(PREFIX)\share\gir-1.0
@if exist $(OUTDIR)\Rsvg-$(RSVG_API_VER).typelib if not exist $(PREFIX)\lib\girepository-1.0\ mkdir $(PREFIX)\lib\girepository-1.0
@if exist $(OUTDIR)\Rsvg-$(RSVG_API_VER).typelib copy /b $(OUTDIR)\Rsvg-$(RSVG_API_VER).typelib $(PREFIX)\lib\girepository-1.0
- @-$(PYTHON) rsvgpc.py --version=$(RSVG_PKG_VERSION) --prefix=$(PREFIX)
- @if not exist librsvg-2.0.pc echo *** librsvg-2.0.pc is not generated! Generate it later using ^$(PYTHON) --version=$(RSVG_PKG_VERSION) --prefix=^$(PREFIX)
- @if exist librsvg-2.0.pc if not exist $(PREFIX)\lib\pkgconfig mkdir $(PREFIX)\lib\pkgconfig
- @if exist librsvg-2.0.pc move librsvg-2.0.pc $(PREFIX)\lib\pkgconfig
+ @-$(PYTHON) rsvgpc.py --version=$(RSVG_PKG_VERSION) --prefix=$(PREFIX) --source=$(OUTDIR)\librsvg-2.0.pc -o $(OUTDIR)\librsvg-2.0.pc.real
+ @if not exist $(OUTDIR)\librsvg-2.0.pc.real echo *** librsvg-2.0.pc may not contain a ^$prefix that matches your build config. Please check it.
+ @if not exist $(PREFIX)\lib\pkgconfig mkdir $(PREFIX)\lib\pkgconfig
+ @if exist $(OUTDIR)\librsvg-2.0.pc.real copy $(OUTDIR)\librsvg-2.0.pc.real $(PREFIX)\lib\pkgconfig\librsvg-2.0.pc
+ @if not exist $(OUTDIR)\librsvg-2.0.pc.real copy $(OUTDIR)\librsvg-2.0.pc $(PREFIX)\lib\pkgconfig
+ @echo.
+ @echo ******* WARNING *******
+ @echo People upgrading from librsvg-2.50.x or earlier
+ @echo may want to consider recompiling their application
+ @echo against this build of librsvg, as $(LIBRSVG_DLL)
+ @echo is provided as a convenience and linking against
+ @echo rsvg-2.0.lib will now always link to rsvg-2.dll.
+ @echo ******* WARNING *******
diff --git a/win32/pc_base.py b/win32/pc_base.py
index a65955d8..e6e89363 100644
--- a/win32/pc_base.py
+++ b/win32/pc_base.py
@@ -23,7 +23,8 @@ class BasePCItems:
self.libdir = ''
self.prefix = ''
self.srcdir = os.path.dirname(__file__)
- self.top_srcdir = self.srcdir + os.sep + '..'
+ self.source = ''
+ self.output = ''
self.version = ''
def setup(self, argv, parser=None):
@@ -42,14 +43,24 @@ class BasePCItems:
if different from ${prefix}/lib')
parser.add_argument('--version', help='Version of the package',
required=True)
+ parser.add_argument('--source', help='Base pc file template',
+ required=True)
+ parser.add_argument( '-o', '--output', help='Output of processed pc file',
+ required=True)
args = parser.parse_args()
self.version = args.version
+ self.source = args.source
+ self.output = args.output
# check whether the prefix and exec_prefix are valid
if not os.path.exists(args.prefix):
raise SystemExit('Specified prefix \'%s\' is invalid' % args.prefix)
+ # check whether output directory is valid
+ if not os.path.exists(os.path.dirname(self.output)):
+ raise SystemExit('Specified path for output \'%s\' is invalid' % self.output)
+
# use absolute paths for prefix
self.prefix = os.path.abspath(args.prefix).replace('\\','/')
diff --git a/win32/rsvg-rust.mak b/win32/rsvg-rust.mak
index 722f1eec..e38afb94 100644
--- a/win32/rsvg-rust.mak
+++ b/win32/rsvg-rust.mak
@@ -100,16 +100,16 @@ build-$(PLAT)-$(CFG).pre.bat:
build-$(PLAT)-$(CFG)-lib.bat: build-$(PLAT)-$(CFG).pre.bat
@type $**>$@
- @echo $(CARGO_CMD) --verbose --lib>>$@
+ @echo $(CARGO_CMD: build = cbuild )>>$@
build-$(PLAT)-$(CFG)-bin.bat: build-$(PLAT)-$(CFG).pre.bat
@type $**>$@
- @echo $(CARGO_CMD) --verbose --bin rsvg-convert>>$@
+ @echo $(CARGO_CMD) --bin rsvg-convert>>$@
-vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\librsvg.lib: build-$(PLAT)-$(CFG)-lib.bat
+vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\rsvg-2.dll.lib: build-$(PLAT)-$(CFG)-lib.bat
vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\rsvg-convert.exe: build-$(PLAT)-$(CFG)-bin.bat
-vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\librsvg.lib \
+vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\rsvg-2.dll.lib \
vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\rsvg-convert.exe:
@echo Please do not manually close the command window that pops up...
@echo.
@@ -120,7 +120,7 @@ vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\r
@start "Building the Rust bits for $(PLAT) Windows MSVC Build, please do not close this console window..." /wait /i cmd /c $**
!else
-vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\librsvg.lib:
+vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\rsvg-2.dll.lib:
@set PATH=%PATH%;%HOMEPATH%\.cargo\bin
@set CARGO_TARGET_DIR=win32\vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api
@set GTK_LIB_DIR=$(LIBDIR);$(LIB)
@@ -129,7 +129,7 @@ vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\l
@if not "$(PKG_CONFIG)" == "" set PKG_CONFIG=$(PKG_CONFIG)
$(RUSTUP_CMD)
@cd ..
- $(CARGO_CMD) --verbose --lib
+ $(CARGO_CMD: build = cbuild )
@cd win32
@set GTK_LIB_DIR=
@set CARGO_TARGET_DIR=
@@ -143,7 +143,7 @@ vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\r
@if not "$(PKG_CONFIG)" == "" set PKG_CONFIG=$(PKG_CONFIG)
$(RUSTUP_CMD)
@cd ..
- $(CARGO_CMD) --verbose --bin $(@B)
+ $(CARGO_CMD) --bin $(@B)
@cd win32
@set GTK_LIB_DIR=
@set CARGO_TARGET_DIR=
diff --git a/win32/rsvgpc.py b/win32/rsvgpc.py
index d913352e..24466345 100644
--- a/win32/rsvgpc.py
+++ b/win32/rsvgpc.py
@@ -18,16 +18,13 @@ def main(argv):
base_pc = BasePCItems()
base_pc.setup(argv)
- pkg_replace_items = {'@RSVG_API_MAJOR_VERSION@': rsvg_api_ver,
- '@RSVG_API_VERSION@': rsvg_api_ver,
- ' cairo': '',
- '-lm': '-lcairo'}
+ pkg_replace_items = {'prefix=/usr/local': 'prefix=' + base_pc.prefix}
pkg_replace_items.update(base_pc.base_replace_items)
# Generate librsvg-$(rsvg_api_ver).pc
- replace_multi(base_pc.top_srcdir + '/librsvg.pc.in',
- base_pc.srcdir + '/librsvg-' + rsvg_api_ver + '.pc',
+ replace_multi(base_pc.source,
+ base_pc.output,
pkg_replace_items)
if __name__ == '__main__':