# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Originally contributed by Mladen Turk <mturk apache.org>
#

!IF !DEFINED(PCTEST) || "$(PCTEST)" == ""
!IF !DEFINED(STATIC) || "$(STATIC)" == ""
TARGET=DLL
PROJECT = libpcre-1
PRPOSIX = libpcreposix-1
!ELSE
TARGET=LIB
PROJECT = pcre-1
PRPOSIX = pcreposix-1
!ENDIF
!ELSE
TARGET=EXE
PROJECT = pcretest
!ENDIF

!IF !DEFINED(SRCDIR) || "$(SRCDIR)" == ""
SRCDIR = .
!ENDIF

!include <xbuild.inc>

CFLAGS = $(CFLAGS) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
CFLAGS = $(CFLAGS) -DHAVE_CONFIG_H -DNO_RECURSE=1

TARGETS = \
	$(WORKDIR)\$(PROJECT).lib \
	$(WORKDIR)\$(PRPOSIX).lib

!IF "$(TARGET)" == "DLL"
TARGETS = $(TARGETS) $(WORKDIR)\$(PROJECT).dll $(WORKDIR)\$(PRPOSIX).dll
!ENDIF
!IF "$(TARGET)" == "LIB"
CFLAGS = $(CFLAGS) -DPCRE_STATIC
!ENDIF
!IF "$(TARGET)" == "EXE"
TARGETS = $(WORKDIR)\pcretest.exe
CFLAGS = $(CFLAGS) -DPCRE_STATIC=1
!ENDIF

BUILDINC = $(PREFIX)\include
BUILDLIB = $(PREFIX)\$(_LIB)
BUILDBIN = $(PREFIX)\bin
PDBFLAGS = -Fo$(WORKDIR)\ -Fd$(WORKDIR)\$(PROJECT)

# Define the $(PROJECT).lib objects
OBJECTS = \
	$(WORKDIR)\pcre_byte_order.obj \
	$(WORKDIR)\pcre_chartables.obj \
	$(WORKDIR)\pcre_compile.obj \
	$(WORKDIR)\pcre_config.obj \
	$(WORKDIR)\pcre_dfa_exec.obj \
	$(WORKDIR)\pcre_exec.obj \
	$(WORKDIR)\pcre_fullinfo.obj \
	$(WORKDIR)\pcre_get.obj \
	$(WORKDIR)\pcre_globals.obj \
	$(WORKDIR)\pcre_jit_compile.obj \
	$(WORKDIR)\pcre_maketables.obj \
	$(WORKDIR)\pcre_newline.obj \
	$(WORKDIR)\pcre_ord2utf8.obj \
	$(WORKDIR)\pcre_refcount.obj \
	$(WORKDIR)\pcre_string_utils.obj \
	$(WORKDIR)\pcre_study.obj \
	$(WORKDIR)\pcre_tables.obj \
	$(WORKDIR)\pcre_ucd.obj \
	$(WORKDIR)\pcre_valid_utf8.obj \
	$(WORKDIR)\pcre_version.obj \
	$(WORKDIR)\pcre_xclass.obj

OBJECTS_TST = \
	$(WORKDIR)\pcre_printint.obj \
	$(WORKDIR)\pcretest.obj

all : "$(WORKDIR)" $(TARGETS)

clean :
	del /Q $(WORKDIR)\*.obj $(WORKDIR)\*.pdb $(WORKDIR)\*.exp $(TARGETS)

install : all
!IF "$(TARGET)" == "EXE"
	-@xcopy "$(WORKDIR)\*.exe" "$(BUILDBIN)" /I /Y /Q 2>NUL
!ELSE
	-@xcopy "$(WORKDIR)\*.lib" "$(BUILDLIB)" /I /Y /Q
	-@xcopy "$(WORKDIR)\*.dll" "$(BUILDBIN)" /I /Y /Q 2>NUL
	-@xcopy "$(SRCDIR)\pcre.h" "$(BUILDINC)\$(NULL)" /Y /Q 2>NUL
	-@xcopy "$(SRCDIR)\pcreposix.h" "$(BUILDINC)\$(NULL)" /Y /Q 2>NUL
!ENDIF

$(WORKDIR) :
	@$(MAKEWORKDIR)

.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) -I "$(SRCDIR)" $(PDBFLAGS) $<
	

# Build the PCRE libraries
$(WORKDIR)\$(PROJECT).lib: $(OBJECTS)
!IF "$(TARGET)" == "DLL"
	lib /nologo /NAME:$(PROJECT).dll /DEF /out:$@ $**
!ELSE
	lib /nologo /OUT:$@ $**
!ENDIF


$(WORKDIR)\$(PRPOSIX).lib: $(WORKDIR)\pcreposix.obj
!IF "$(TARGET)" == "DLL"
	lib /nologo /NAME:$(PROJECT)posix.dll /DEF /out:$@ $**
!ELSE
	lib /nologo /OUT:$@ $**
!ENDIF

!IF "$(TARGET)" == "DLL"
$(WORKDIR)\$(PROJECT).dll: $(OBJECTS)
	$(LINK) $(LFLAGS) $(LIBS) /PDB:$*.pdb /OUT:$*.dll $**
	IF EXIST $*.dll.manifest \
		mt -nologo -manifest $*.dll -outputresource:$*.dll;2

$(WORKDIR)\$(PRPOSIX).dll: $(WORKDIR)\pcreposix.obj
	$(LINK) $(LFLAGS) $(LIBS) /PDB:$*.pdb /OUT:$*.dll $** $(WORKDIR)\$(PROJECT).lib
	IF EXIST $*.dll.manifest \
		mt -nologo -manifest $*.dll -outputresource:$*.dll;2

!ENDIF

!IF "$(TARGET)" == "EXE"
$(WORKDIR)\pcretest.exe: $(OBJECTS_TST)
	$(LINK) $(LFLAGS) $(LIBS) $(BUILDLIB)\pcre-1.lib $(BUILDLIB)\pcreposix-1.lib /PDB:$*.pdb /OUT:$*.exe $**
	IF EXIST $*.exe.manifest \
		mt -nologo -manifest $*.exe -outputresource:$*.exe;1

!ENDIF

