Blame windows/Makefile.vc

Packit Service df60bb
# To build locally get a copy of the dependancies (http://windows.php.net/downloads/php-sdk/deps/)
Packit Service df60bb
# These are the dependencies used by PHP and largely used and tested. These binaries are built using
Packit Service df60bb
# the sources available at https://github.com/winlibs
Packit Service df60bb
# Then run 'nmake /f windows\Makefile.vc' in MS dev console
Packit Service df60bb
# To build tests as well 'nmake /f windows\Makefile.vc all'
Packit Service df60bb
# To build tests and execute them 'nmake /f windows\Makefile.vc check'
Packit Service df60bb
Packit Service df60bb
CC=cl
Packit Service df60bb
LD=link
Packit Service df60bb
LB=lib
Packit Service df60bb
Packit Service df60bb
!IFNDEF DEBUG
Packit Service df60bb
DEBUG=0
Packit Service df60bb
!ENDIF
Packit Service df60bb
Packit Service df60bb
!IFNDEF WITH_DEVEL
Packit Service df60bb
WITH_DEVEL=..\deps
Packit Service df60bb
!ENDIF
Packit Service df60bb
Packit Service df60bb
!IFNDEF WITH_BUILD
Packit Service df60bb
WITH_BUILD=..\gdbuild
Packit Service df60bb
!ENDIF
Packit Service df60bb
Packit Service df60bb
LIBGD_SRC_DIR=src
Packit Service df60bb
LIBGD_OBJ_DIR=$(WITH_BUILD)
Packit Service df60bb
LIBGD_BIN_DIR=$(WITH_BUILD)\bin
Packit Service df60bb
LIBGD_TEST_DIR=test
Packit Service df60bb
Packit Service df60bb
!IFNDEF PLATFORM
Packit Service df60bb
PLATFORM=x86
Packit Service df60bb
!ENDIF
Packit Service df60bb
# detect x64 cross-compiler env
Packit Service df60bb
!IF "$(PREFERREDTOOLARCHITECTURE)" == "x64"
Packit Service df60bb
PLATFORM=x64
Packit Service df60bb
!ENDIF
Packit Service df60bb
PLATFORM=$(PLATFORM:X=x)
Packit Service df60bb
Packit Service df60bb
BUILD_DIR=$(WITH_BUILD)
Packit Service df60bb
Packit Service df60bb
!MESSAGE library source:  $(LIBGD_SRC_DIR)
Packit Service df60bb
Packit Service df60bb
GD_DLL=libgd.dll
Packit Service df60bb
GD_LIB=libgd_a.lib
Packit Service df60bb
GD_CONFIG_H=$(LIBGD_SRC_DIR)\config.h
Packit Service df60bb
Packit Service df60bb
Packit Service df60bb
SDR=$(BUILD_DIR)^\
Packit Service df60bb
TDR=$(BUILD_DIR)\tests^\
Packit Service df60bb
TARGETDLL=$(BUILD_DIR)\$(GD_DLL)
Packit Service df60bb
TARGETLIB=$(BUILD_DIR)\$(GD_LIB)
Packit Service df60bb
Packit Service df60bb
LIB_OBJS= \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdcache.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_color.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_color_match.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdfontg.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdfontl.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdfontmb.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdfonts.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdfontt.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdft.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdfx.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_filename.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_filter.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_bmp.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_gd2.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_gd.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_gif_in.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_gif_out.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdhelpers.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_io.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_io_dp.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_io_file.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_io_ss.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_jpeg.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_security.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_tga.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_tiff.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_xbm.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdkanji.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_nnquant.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_png.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_ss.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdtables.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_topal.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_transform.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_wbmp.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gdxpm.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\wbmp.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_interpolation.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_matrix.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_rotate.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_version.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_crop.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_color_map.obj \
Packit Service df60bb
  $(LIBGD_OBJ_DIR)\gd_webp.obj
Packit Service df60bb
Packit Service df60bb
LIBS=kernel32.lib ole32.lib user32.lib advapi32.lib shell32.lib ws2_32.lib Dnsapi.lib Gdi32.Lib
Packit Service df60bb
LIBS_GD=libjpeg_a.lib freetype_a.lib libpng_a.lib libiconv_a.lib  zlib_a.lib libwebp_a.lib libxpm_a.lib libtiff.lib
Packit Service df60bb
Packit Service df60bb
PROG_EXES= \
Packit Service df60bb
	$(LIBGD_OBJ_DIR)\gdcmpgif.exe \
Packit Service df60bb
	$(LIBGD_OBJ_DIR)\gdtopng.exe \
Packit Service df60bb
	$(LIBGD_OBJ_DIR)\pngtogd.exe \
Packit Service df60bb
	$(LIBGD_OBJ_DIR)\gdparttopng.exe \
Packit Service df60bb
	$(LIBGD_OBJ_DIR)\gd2topng.exe \
Packit Service df60bb
	$(LIBGD_OBJ_DIR)\pngtogd2.exe \
Packit Service df60bb
	$(LIBGD_OBJ_DIR)\annotate.exe \
Packit Service df60bb
	$(LIBGD_OBJ_DIR)\gd2copypal.exe \
Packit Service df60bb
	$(LIBGD_OBJ_DIR)\gd2togif.exe \
Packit Service df60bb
	$(LIBGD_OBJ_DIR)\giftogd2.exe
Packit Service df60bb
PROG_OBJS=$(PROG_EXES:exe=obj)
Packit Service df60bb
Packit Service df60bb
INCLUDES=/Isrc /I$(WITH_DEVEL)\include -I$(WITH_DEVEL)\include\libpng16 -I$(WITH_DEVEL)\include\freetype -I$(WITH_DEVEL)\include\freetype2 /Itests /Itests\gdtest -I$(WITH_DEVEL)\include\
Packit Service df60bb
Packit Service df60bb
LDFLAGS=/nologo /nodefaultlib:libcmt /libpath:$(WITH_DEVEL)\lib /MACHINE:$(PLATFORM)
Packit Service df60bb
!IF $(DEBUG)
Packit Service df60bb
LDFLAGS=$(LDFLAGS) /DEBUG
Packit Service df60bb
!ENDIF
Packit Service df60bb
Packit Service df60bb
!IF $(DEBUG)
Packit Service df60bb
CFLAGS=/nologo /Qvec-report:1 /MD /TC /Zi
Packit Service df60bb
!ELSE
Packit Service df60bb
CFLAGS=/nologo /O2 /Qvec-report:1 /MD /TC
Packit Service df60bb
!ENDIF
Packit Service df60bb
Packit Service df60bb
CFLAGS= $(CFLAGS) \
Packit Service df60bb
       /DWIN32=1\
Packit Service df60bb
       /D_WIN32=1\
Packit Service df60bb
       /DMSWIN32=1\
Packit Service df60bb
       /DBGDWIN32=1\
Packit Service df60bb
       /DHAVE_FT2BUILD_H=1\
Packit Service df60bb
       /DHAVE_GD_H=1\
Packit Service df60bb
       /DHAVE_ICONV_H=1\
Packit Service df60bb
       /DHAVE_GD_BUNDLED=1\
Packit Service df60bb
       /DHAVE_LIBFREETYPE=1\
Packit Service df60bb
       /DHAVE_LIBJPEG=1\
Packit Service df60bb
       /DHAVE_LIBPNG=1\
Packit Service df60bb
	   /DHAVE_LIBWEBP=1\
Packit Service df60bb
       /DHAVE_LIBZ=1\
Packit Service df60bb
	   /DHAVE_LIBXPM=1\
Packit Service df60bb
       /DHAVE_LIBTIFF=1\
Packit Service df60bb
       $(INCLUDES)
Packit Service df60bb
Packit Service df60bb
TEST_CFLAGS=$(CFLAGS)
Packit Service df60bb
TEST_LDFLAGS=$(LDFLAGS) $(SDR)readdir.obj $(SDR)gdtest.obj $(BUILD_DIR)\libgd.lib
Packit Service df60bb
TEST_LIST=$(TDR)testlist.txt
Packit Service df60bb
TEST_MK=$(TDR)Maketests.vc
Packit Service df60bb
Packit Service df60bb
TEST_OBJS=$(TEST_EXES:tests=obj)
Packit Service df60bb
TEST_OBJS=$(TEST_OBJS:exe=obj)
Packit Service df60bb
Packit Service df60bb
# create buil dir and test exe dir. test ext dir may not be called but easier like this
Packit Service df60bb
# so we can include the gentest file
Packit Service df60bb
!IF [if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)]
Packit Service df60bb
!ENDIF
Packit Service df60bb
Packit Service df60bb
!IF [if not exist $(TDR) mkdir $(TDR)]
Packit Service df60bb
!ENDIF
Packit Service df60bb
Packit Service df60bb
!IF [$(MAKEDIR)\windows\gentest.bat tests $(BUILD_DIR) "$(TEST_CFLAGS)" "$(TEST_LDFLAGS)" $(CC) $(LD) "$(TEST_MK)" "$(TEST_LIST)"]
Packit Service df60bb
!ENDIF
Packit Service df60bb
Packit Service df60bb
# pseudotargets
Packit Service df60bb
build_libs: make_dirs $(TARGETDLL) $(TARGETLIB)
Packit Service df60bb
build_progs: build_libs $(PROG_OBJS) $(PROG_EXES)
Packit Service df60bb
all: build_libs build_tests build_progs
Packit Service df60bb
check: all run_tests
Packit Service df60bb
Packit Service df60bb
clean:
Packit Service df60bb
  @if exist $(SDR) rd $(SDR) /s /q
Packit Service df60bb
  @if exist $(TDR) rd $(TDR) /s /q
Packit Service df60bb
  @if exist $(BUILD_DIR)\*.exe del $(BUILD_DIR)\*.exe /q
Packit Service df60bb
Packit Service df60bb
# helpers
Packit Service df60bb
Packit Service df60bb
make_dirs:
Packit Service df60bb
	@if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)
Packit Service df60bb
	@if not exist $(SDR) mkdir $(SDR)
Packit Service df60bb
	@echo #ifndef HAVE_FT2BUILD_H> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #define HAVE_FT2BUILD_H>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #endif>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #ifndef HAVE_ICONV_H>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #define HAVE_ICONV_H>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #endif>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #ifndef HAVE_LIBFREETYPE>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #define HAVE_LIBFREETYPE>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #endif>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #ifndef HAVE_LIBJPEG>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #define HAVE_LIBJPEG>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #endif>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #ifndef HAVE_LIBPNG>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #define HAVE_LIBPNG>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #endif>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #ifndef HAVE_LIBWEBP>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #define HAVE_LIBWEBP>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #endif>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #ifndef HAVE_LIBZ>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #define HAVE_LIBZ>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #endif>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #ifndef HAVE_LIBXPM>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #define HAVE_LIBXPM>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #endif>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #ifndef HAVE_INTTYPES_H>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #define HAVE_INTTYPES_H>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #endif>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #ifndef HAVE_SYS_STAT_H>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #define HAVE_SYS_STAT_H>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #endif>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #ifndef HAVE_LIBTIFF>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #define HAVE_LIBTIFF>> $(GD_CONFIG_H)
Packit Service df60bb
	@echo #endif>> $(GD_CONFIG_H)
Packit Service df60bb
Packit Service df60bb
run_tests: pretest
Packit Service df60bb
	@cd $(TDR)
Packit Service df60bb
	@$(MAKEDIR)\windows\run_tests
Packit Service df60bb
Packit Service df60bb
# libgd
Packit Service df60bb
$(LIBGD_OBJ_DIR):
Packit Service df60bb
	@if not exist $(LIBGD_OBJ_DIR) mkdir $(LIBGD_OBJ_DIR)
Packit Service df60bb
Packit Service df60bb
$(LIBGD_BIN_DIR):
Packit Service df60bb
	@if not exist $(LIBGD_BIN_DIR) mkdir $(LIBGD_BIN_DIR)
Packit Service df60bb
Packit Service df60bb
$(TARGETDLL): $(LIB_OBJS)
Packit Service df60bb
  @$(LD) /DLL /OUT:$@ $(LIB_OBJS) $(LIBS_GD) $(LIBS) $(LDFLAGS)
Packit Service df60bb
Packit Service df60bb
$(TARGETLIB): $(LIB_OBJS)
Packit Service df60bb
  @$(LB) /OUT:$@ $(LIB_OBJS) $(LDFLAGS)
Packit Service df60bb
Packit Service df60bb
{$(LIBGD_SRC_DIR)\}.c{$(LIBGD_OBJ_DIR)\}.obj:
Packit Service df60bb
	$(CC) $(CFLAGS) /c /Fo"$@" /Fd$*.pdb $<
Packit Service df60bb
Packit Service df60bb
all: $(LIBGD_OBJ_DIR) $(LIBGD_BIN_DIR) $(LIB_OBJS) $(STATICLIB)
Packit Service df60bb
Packit Service df60bb
.SUFFIXES: .c .obj .res .exe
Packit Service df60bb
Packit Service df60bb
# tests
Packit Service df60bb
Packit Service df60bb
!INCLUDE $(TEST_MK)
Packit Service df60bb
build_tests: $(TEST_LIST) $(SDR)readdir.obj $(SDR)gdtest.obj $(TEST_EXES)
Packit Service df60bb
Packit Service df60bb
$(SDR)gdtest.obj: $(TARGETDLL) tests\gdtest\gdtest.c
Packit Service df60bb
  @$(CC) $(CFLAGS) /DGDTEST_TOP_DIR=\"$(MAKEDIR:\=\\)\\tests\" /c tests\gdtest\gdtest.c /Fd$(SDR)gdtest.pdb /Fo$(SDR)gdtest.obj
Packit Service df60bb
Packit Service df60bb
$(SDR)readdir.obj: $(TARGETDLL) tests\gdtest\readdir.c
Packit Service df60bb
  @$(CC) $(CFLAGS) /c tests\gdtest\readdir.c /Fd$(SDR)readdir.pdb /Fo$(SDR)readdir.obj
Packit Service df60bb
Packit Service df60bb
pretest: $(TARGETDLL)
Packit Service df60bb
	if not exist $(TDR) mkdir $(TDR)
Packit Service df60bb
	copy $(TARGETDLL) $(TDR)$(GD_DLL)
Packit Service df60bb
Packit Service df60bb
# programs
Packit Service df60bb
Packit Service df60bb
{$(LIBGD_OBJ_DIR)}.obj{$(LIBGD_OBJ_DIR)}.exe:
Packit Service df60bb
	$(LD) $(LDFLAGS) $** $(BUILD_DIR)\libgd.lib /out:$@