TARGETNAME=syssetup
TARGETPATH=obj
PASS1_PUBLISH={$(O)\$(TARGETNAME).lib=$(SDK_LIB_PATH)\$(TARGETNAME).lib}
TARGETTYPE=DYNLINK

DLLENTRY=_DllMainCRTStartup
#USE_MSVCRT=1
USE_LIBCMT=1

PASS0_HEADERDIR=$(O)
PASS0_SOURCEDIR=$(O)

!include $(PROJECT_ROOT)\headless\lib\sources.inc
INCLUDES=\
         ..\inc;\
         ..\ocmanage\inc;\
         ..\..\pchealth\sr\inc;\
         $(NET_INC_PATH);\
         $(WINDOWS_INC_PATH);\
         $(SHELL_INC_PATH);\
         $(BASE_INC_PATH);\
         $(DS_INC_PATH);\
         $(DDK_INC_PATH); \
         $(DRIVERS_INC_PATH); \
         $(PROJECT_ROOT)\ntos\inc; \
         $(BASE_SAC_UMODE_C_API_INC);

C_DEFINES=-DUNICODE -D_OCM
USE_SETUP_PERF=1
!if "$(USE_SETUP_PERF)" == "1"
C_DEFINES=$(C_DEFINES) -D_SETUP_PERF_ -D_ENABLE_SAC_CHANNEL_LOGGING_

!endif

!include $(PROJECT_ROOT)\ntsetup\sources.inc

SOURCES=applyacl.c  \
        afpnp.c     \
        arc.c       \
        asrbkup.c   \
        asrclus.c   \
        asrrest.c   \
        billbrd.c   \
        clasinst.c  \
        clasprop.c  \
        cmdline.c   \
        copy.c      \
        crypto.c    \
        ctls.c      \
        debug.c     \
        dll.c       \
        dynupdt.c   \
        external.c  \
        extprog.c   \
        fileops.c   \
        inifile.c   \
        infcache.c  \
        intl.c      \
        log.c       \
        mainwind.c  \
        misc.c      \
        msg.mc      \
        names.c     \
        netdde.c    \
        ocm.c       \
        oobe.c      \
        optdirs.c   \
        pid.c       \
        preinst.c   \
        printer.c   \
        printupg.c  \
        ps2ppg.c    \
        registry.c  \
        repair.c    \
        resource.c  \
        sacchan.c   \
        security.c  \
        services.c  \
        setupasr.c  \
        sif.c       \
        storinst.c  \
        strtmenu.c  \
        syspnp.c    \
        syssec.c    \
        syssetup.c  \
        unattend.c  \
        userdiff.c  \
        vdm.c       \
        virtmem.c   \
        watch.c     \
        welcome.c   \
        wizard.c    \
        syssetup.rc \
        utils.cpp \
    _setup_browser.cxx

MIGSHARED_ROOT=$(PROJECT_ROOT)\ntsetup\migshared
MIGSHARED_BIN=$(MIGSHARED_ROOT)\$(O)
PCH_LIB_PATHA=$(MIGSHARED_ROOT)\pcha\$(O)\pcha.lib
PCH_LIB_PATHW=$(MIGSHARED_ROOT)\pchw\$(O)\pchw.lib
MIGSHARED_PRECOMPILED_LIBS=$(PCH_LIB_PATHA) $(PCH_LIB_PATHW)

HWDB_BIN=$(PROJECT_ROOT)\ntsetup\hwdb\lib\$(O)


LINKLIBS=$(PROJECT_LIB_PATH)\pnpsif.lib  \
        $(PROJECT_LIB_PATH)\pencrypt.lib\
        ..\excppkg\$(O)\excppkg.lib     \
         ..\hwlog\$(O)\hwlog.lib        \
        $(HWDB_BIN)\hwdblib.lib         \
        $(MIGSHARED_PRECOMPILED_LIBS)   \
        $(MIGSHARED_BIN)\migutil.lib    \
        $(BASE_LIB_PATH)\spapip.lib     \

# IMPORANT: spapip.lib is a superset of setupapi.lib and sputils?.lib. However,
#           the initialization is in the DllMain function, so we include stub
#           implementations of pSetupInitializeUtils and pSetupUninitializeUtils
#           in syssetup.c.


TARGETLIBS=\
           $(SDK_LIB_PATH)\advapi32.lib \
           $(SDK_LIB_PATH)\comctl32.lib \
           $(SDK_LIB_PATH)\crypt32.lib  \
           $(SDK_LIB_PATH)\dnsapi.lib   \
           $(SDK_LIB_PATH)\gdi32.lib    \
           $(SDK_LIB_PATH)\imagehlp.lib \
           $(SDK_LIB_PATH)\kernel32.lib \
           $(SDK_LIB_PATH)\kernl32p.lib \
           $(SDK_LIB_PATH)\ole32.lib    \
           $(SDK_LIB_PATH)\powrprof.lib \
           $(DS_LIB_PATH)\dpapi.lib \
           $(SDK_LIB_PATH)\samlib.lib   \
           $(BASE_LIB_PATH)\spapip.lib  \
           $(BASE_LIB_PATH)\wow64reg.lib  \
           $(SDK_LIB_PATH)\user32.lib   \
           $(SDK_LIB_PATH)\userenv.lib  \
           $(SDK_LIB_PATH)\version.lib  \
           $(SDK_LIB_PATH)\winspool.lib \
           $(SDK_LIB_PATH)\sfc.lib \
           $(SDK_LIB_PATH)\sfcfiles.lib \
           $(SDK_LIB_PATH)\shlwapi.lib  \
           $(PROJECT_ROOT)\ntsetup\ocmanage\$(O)\ocmanage.lib \
           $(PROJECT_ROOT)\ntsetup\setuplog\unicode\$(O)\setuplgu.lib \
           $(SDK_LIB_PATH)\cryptui.lib  \
           $(SDK_LIB_PATH)\rpcutil.lib \
           $(SDK_LIB_PATH)\netapi32.lib \
           $(SDK_LIB_PATH)\rpcrt4.lib \
           $(DS_LIB_PATH)\rsa32.lib \
           $(PROJECT_LIB_PATH)\encrypt.lib \
           $(PROJECT_ROOT)\ntsetup\pidgen\lib\trial\$(O)\pidgen.lib \
           $(SDK_LIB_PATH)\imm32.lib \
           $(SDK_LIB_PATH)\wintrust.lib \
           $(BASE_SAC_UMODE_C_API_LIB)

UMRES=$(O)\syssetup.res

DELAYLOAD=\
        comctl32.dll;     \
        crypt32.dll;      \
        dnsapi.dll;       \
        imagehlp.dll;     \
        ocmanage.dll;     \
        ole32.dll;        \
        pidgen.dll;       \
        samlib.dll;       \
        userenv.dll;      \
        winspool.drv

!if $(WIN64)
DELAYLOAD=\
        $(DELAYLOAD);     \
        shlwapi.dll
!endif

DLOAD_ERROR_HANDLER=kernel32.dll

PRECOMPILED_INCLUDE=setupp.h
PRECOMPILED_PCH=setupp.pch
PRECOMPILED_OBJ=setupp.obj

OPTIONAL_UMTEST=x
UMTYPE=windows
UMENTRY=wmain
UMLIBS=$(SDK_LIB_PATH)\syssetup.lib     \
       $(BASE_LIB_PATH)\spapip.lib      \
       $(SDK_LIB_PATH)\comctl32.lib

#
# This is an odd use of Sxs.
# Setup registers .dlls that depends on gdiplus.dll, which is in the
# system default context, but not (any longer) in system32.
# The system default context for the setup.exe process is created before
# we actually install the system default assembly. Creating the system
# default context silently fails if the system default assembly has
# not yet been installed, and is simply retried for every subsequent
# process create. "system default" is also known as "system compatible".
#
SXS_ASSEMBLY_LANGUAGE_INDEPENDENT=1
SXS_MANIFEST=SysSetup.Manifest
SXS_ASSEMBLY_NAME=Microsoft.Windows.Setup
SXS_NO_BINPLACE=1
SXS_MANIFEST_IN_RESOURCES=1
SXS_MANIFEST_RESOURCE_ID=1234
C_DEFINES=$(C_DEFINES) -DSXS_MANIFEST_RESOURCE_ID=MAKEINTRESOURCEW($(SXS_MANIFEST_RESOURCE_ID))