1#
2# CPL (Common Portability Library) makefile for MSVC
3#
4
5OBJ	=	cpl_conv.obj \
6		cpl_error.obj \
7		cpl_string.obj \
8		cplstring.obj \
9		cplstringlist.obj \
10		cpl_strtod.obj \
11		cpl_vsisimple.obj \
12		cplgetsymbol.obj \
13		cpl_path.obj \
14		cpl_csv.obj \
15		cpl_findfile.obj \
16		cpl_vsil_win32.obj \
17		cpl_minixml.obj \
18		cpl_multiproc.obj \
19		cpl_list.obj \
20		cpl_getexecpath.obj \
21		cpl_vsil.obj \
22		cpl_vsi_mem.obj \
23		cpl_http.obj \
24		cpl_hash_set.obj \
25		cplkeywordparser.obj \
26		cpl_recode.obj \
27		cpl_recode_iconv.obj \
28		cpl_recode_stub.obj \
29		cpl_quad_tree.obj \
30		cpl_vsil_gzip.obj \
31		cpl_minizip_ioapi.obj \
32		cpl_minizip_unzip.obj \
33		cpl_minizip_zip.obj \
34		cpl_vsil_subfile.obj \
35		cpl_atomic_ops.obj \
36		cpl_time.obj \
37		cpl_vsil_stdout.obj \
38		cpl_vsil_sparsefile.obj \
39		cpl_vsil_abstract_archive.obj \
40		cpl_vsil_tar.obj \
41		cpl_vsil_curl.obj \
42		cpl_vsil_s3.obj \
43		cpl_vsil_gs.obj \
44		cpl_vsil_az.obj \
45		cpl_vsil_adls.obj \
46		cpl_vsil_oss.obj \
47		cpl_vsil_plugin.obj \
48		cpl_vsil_swift.obj \
49		cpl_vsil_webhdfs.obj \
50		cpl_vsil_hdfs.obj \
51		cpl_vsil_curl_streaming.obj \
52		cpl_vsil_stdin.obj \
53		cpl_vsil_buffered_reader.obj \
54		cpl_vsil_cache.obj \
55		cpl_base64.obj \
56		cpl_xml_validate.obj \
57		cpl_spawn.obj \
58		cpl_google_oauth2.obj \
59		cpl_progress.obj \
60		cpl_virtualmem.obj \
61		cpl_worker_thread_pool.obj \
62		cpl_vsil_crypt.obj \
63		cpl_sha1.obj \
64		cpl_sha256.obj \
65		cpl_aws.obj \
66		cpl_aws_win32.obj \
67		cpl_vsi_error.obj \
68		cpl_cpu_features.obj \
69		cpl_google_cloud.obj \
70		cpl_azure.obj \
71		cpl_alibaba_oss.obj \
72		cpl_json_streaming_parser.obj \
73		cpl_json_streaming_writer.obj \
74		cpl_json.obj \
75		cpl_md5.obj \
76		cpl_swift.obj \
77		cpl_vax.obj \
78		cpl_vsil_uploadonclose.obj \
79		$(ODBC_OBJ)
80
81LIB	=	cpl.lib
82
83GDAL_ROOT = ..
84
85!INCLUDE ..\nmake.opt
86
87!IFDEF ZLIB_EXTERNAL_LIB
88EXTRAFLAGS = $(ZLIB_INC)
89!ELSE
90EXTRAFLAGS = -I..\frmts\zlib
91!ENDIF
92
93EXTRAFLAGS	= 	 $(EXTRAFLAGS) -DHAVE_LIBZ -I..\ogr\ogrsf_frmts\geojson\libjson
94
95!IFDEF LIBICONV_INCLUDE
96EXTRAFLAGS =	$(EXTRAFLAGS) -DHAVE_ICONV $(LIBICONV_CFLAGS) $(LIBICONV_INCLUDE)
97!ENDIF
98
99!IFDEF CURL_INC
100EXTRAFLAGS =	$(EXTRAFLAGS) -DHAVE_CURL $(CURL_CFLAGS) $(CURL_INC)
101!ENDIF
102
103!IFDEF LIBXML2_INC
104EXTRAFLAGS =	$(EXTRAFLAGS) -DHAVE_LIBXML2 $(LIBXML2_INC)
105!ENDIF
106
107!IFDEF CRYPTOPP_INC
108EXTRAFLAGS =	$(EXTRAFLAGS) -DHAVE_CRYPTOPP $(CRYPTOPP_INC)
109!ENDIF
110
111!IFDEF USE_ONLY_CRYPTODLL_ALG
112EXTRAFLAGS =	$(EXTRAFLAGS) -DUSE_ONLY_CRYPTODLL_ALG
113!ENDIF
114
115!IFDEF OPENSSL_INC
116EXTRAFLAGS =	$(EXTRAFLAGS) -DHAVE_OPENSSL_CRYPTO $(OPENSSL_INC)
117!ENDIF
118
119!IFDEF LIBDEFLATE_CFLAGS
120EXTRAFLAGS =	$(EXTRAFLAGS) $(LIBDEFLATE_CFLAGS) -DHAVE_LIBDEFLATE
121!ENDIF
122
123!IFDEF ODBC_SUPPORTED
124ODBC_OBJ =	cpl_odbc.obj
125!ENDIF
126
127default:	prev_dllbuild cpl_config.h $(LIB)
128
129$(LIB):	$(OBJ)
130	lib /out:cpl.lib *.obj
131
132clean:
133	-del *.obj *.lib cpl_config.h dllbuild.prev
134
135# This "mechanism" updates a temporary dllbuild.prev file with the $(DLLBUILD) setting, but only
136# when dllbuild.prev doesn't exist or doesn't match the current $(DLLBUILD) setting.
137#
138# The upside to this is that repeated builds with the same setting won't cause cpl_config.h to be
139# regenerated, which should prevent unnecessary recompilation.
140#
141# It has to be done in a temporary/inline batch script because normal NMAKE commands apparently
142# don't have extensions enabled which apparently prevents setting a variable from file contents.
143prev_dllbuild:
144	call <<prev_dllbuild.bat
145@SETLOCAL ENABLEEXTENSIONS
146IF NOT EXIST dllbuild.prev (ECHO $(DLLBUILD))> dllbuild.prev
147SET /P PREV_DLLBUILD=<dllbuild.prev
148IF NOT "%PREV_DLLBUILD%"=="$(DLLBUILD)" (ECHO $(DLLBUILD))> dllbuild.prev
149<<
150
151cpl_config.h:	dllbuild.prev \
152				cpl_config.h.vc.begin \
153				cpl_config.h.vc.common \
154				cpl_config.h.vc.no_dll \
155				cpl_config.h.vc.end
156	type cpl_config.h.vc.begin > cpl_config.h
157	type cpl_config.h.vc.common >> cpl_config.h
158	IF NOT "$(DLLBUILD)"=="1" \
159		type cpl_config.h.vc.no_dll >> cpl_config.h
160	type cpl_config.h.vc.end >> cpl_config.h
161