# # $Id$ # # # Makefile for Harbour Project for Borland C/C++ 5.x compilers # # --------------------------------------------------------------- # If you need to set additional compiler/linker options use the # environment variables below, but please DON'T MODIFY THIS FILE # for this purpose. # --------------------------------------------------------------- # # NOTE: You can use these envvars to configure the make process: # (note that these are all optional) # # CFLAGS - Extra C compiler options for libraries and for # executables # CLIBFLAGS - Extra C compiler options for the libraries # C_USR - Extra C compiler options for libraries and for # executables (GNU make compatible envvar) # HARBOURFLAGS - Extra Harbour compiler options # HB_GT_LIB - To override the default GT driver # (search for HB_GT_LIBS for a list of values) # PRG_USR - Extra Harbour compiler options # (GNU make compatible envvar) # HB_BUILD_DEBUG - If set to yes causes to compile with debug info # HB_BUILD_VERBOSE - enables echoing commands being executed # BCCDLL_WITH_DYNRT - If set to -tWR causes taht harbour-bc.dll # will use dynamic runtime library (recommended) # # HB_DOC_PDF - Turns on the .PDF file support in the HBDOC utility. # Note that this will require the pdflib contrib. # # NOTE: BCC_NOSTARTUP must be defined for Borland C++ 5.3 to make it work. # # --------------------------------------------------------------- # "echo." intentionally used instead of "echo", to avoid conflicts # with external commands named echo. # using macros for ECHO and DEL to allow overiding such as: # # set ECHO=cmd /c echo # set DEL=cmd /c del # # The above might be needed on Windows 2000 and XP. # The macros are referenced in makefile.bc # --------------------------------------------------------------- .AUTODEPEND #********************************************************** .SUFFIXES: .exe .lib .obj .prg .c .l .y #********************************************************** !ifndef ECHO ECHO = echo. !endif !ifndef DEL DEL = del !endif #********************************************************** CC = bcc32.exe LINKER = ilink32.exe MKLIB = tlib.exe # subdir name for objs,libs,exes # depends on chosen compiler type # Bcc=b32, Msvc=vc !ifndef CC_DIRNAME CC_DIRNAME = b32 !endif #********************************************************** #********************************************************** #********************************************************** # # C compiler definition and C flags. These should never have to change. # # Main "Include" directory INCLUDE_DIR = include CFLAGS = -I$(INCLUDE_DIR) $(C_USR) $(CFLAGS) !ifndef BCC_NOOPTIM CFLAGS = -O2 $(CFLAGS) !endif CLIBFLAGS = -c -q $(CFLAGS) $(CLIBFLAGS) !ifdef HB_BUILD_DEBUG CLIBFLAGS = -y -v $(CLIBFLAGS) !endif CLIBFLAGSDLL = -D__EXPORT__ -DHB_FM_STATISTICS_OFF -tWM $(BCCDLL_WITH_DYNRT) $(CLIBFLAGS) HARBOURFLAGS = -i$(INCLUDE_DIR) -n -q0 -w -es2 -gc0 $(PRG_USR) $(HARBOURFLAGS) LDFLAGS = $(LDFLAGS) !ifdef HB_BUILD_DEBUG LDFLAGS = -v $(LDFLAGS) !endif LDFLAGSDLL = -aa -Gn -C -Tpd -Gi $(LDFLAGSDLL) !ifdef HB_DOC_PDF HARBOURFLAGS = $(HARBOURFLAGS) -dPDF !endif #********************************************************** # This is needed, otherwise the libs may overflow # when debug info is requested with -v -y ARFLAGS = /P32 #********************************************************** #********************************************************** #********************************************************** # Include Common Object list files # shared between Msvc and Borland !include Common.mak #********************************************************** # Some definitions cannot be kept in Common.mak # due to serious limitations of Microsoft Nmake DLL_OBJS = $(TMP_DLL_OBJS:$(OBJ_DIR)=$(DLL_OBJ_DIR)) #********************************************************** #********************************************************** #********************************************************** # # COMPILE Rules # #********************************************************** # General *.c --> *.obj COMPILE rule for STATIC Libraries {$(ALL_SRC_DIRS)}.c{$(OBJ_DIR)}.obj: $(HIDE)$(CC) $(CLIBFLAGS) -o$@ $< #********************************************************** # General *.prg --> *.obj COMPILE rule for STATIC Libraries {$(ALL_SRC_DIRS)}.prg{$(OBJ_DIR)}.obj: $(HIDE)$(HARBOUR_EXE) $(HARBOURFLAGS) $** -o$(OBJ_DIR)\\ $(HIDE)$(CC) $(CLIBFLAGS) -o$@ $(OBJ_DIR)\$&.c #********************************************************** # General *.c --> *.obj COMPILE rule for SHARED Libraries {$(ALL_SRC_DIRS)}.c{$(DLL_OBJ_DIR)}.obj: $(HIDE)$(CC) $(CLIBFLAGSDLL) -o$@ $< #********************************************************** # General *.prg --> *.obj COMPILE rule for SHARED Libraries {$(ALL_SRC_DIRS)}.prg{$(DLL_OBJ_DIR)}.obj: $(HIDE)$(HARBOUR_EXE) -D__EXPORT__ $(HARBOURFLAGS) $** -o$(DLL_OBJ_DIR)\\ $(HIDE)$(CC) $(CLIBFLAGSDLL) -o$@ $(DLL_OBJ_DIR)\$&.c #********************************************************** #********************************************************** #********************************************************** # General BUILD rules (not used !) #********************************************************** # General Library BUILD rule .obj.lib: $(HIDE)IF EXIST "$@" $(DEL) "$@" > NUL $(HIDE)$(MKLIB) "$@" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** #********************************************************** #********************************************************** # TARGET dependencies #********************************************************** all : $(HB_BUILD_TARGETS) # # Helper targets # BasicLibs : $(COMMON_LIB) $(PP_LIB) BasicExes : $(HARBOUR_EXE) StdLibs : $(STANDARD_STATIC_HBLIBS) #********************************************************** clean: -@if exist $(BIN_DIR)\*.exe $(DEL) $(BIN_DIR)\*.exe > nul -@if exist $(BIN_DIR)\*.tds $(DEL) $(BIN_DIR)\*.tds > nul -@if exist $(BIN_DIR)\*.map $(DEL) $(BIN_DIR)\*.map > nul -@if exist $(BIN_DIR)\*.dll $(DEL) $(BIN_DIR)\*.dll > nul -@if exist $(BIN_DIR)\*.lib $(DEL) $(BIN_DIR)\*.lib > nul -@if exist $(LIB_DIR)\*.lib $(DEL) $(LIB_DIR)\*.lib > nul -@if exist $(LIB_DIR)\*.bak $(DEL) $(LIB_DIR)\*.bak > nul -@if exist $(OBJ_DIR)\*.obj $(DEL) $(OBJ_DIR)\*.obj > nul -@if exist $(OBJ_DIR)\*.c $(DEL) $(OBJ_DIR)\*.c > nul -@if exist $(OBJ_DIR)\*.h $(DEL) $(OBJ_DIR)\*.h > nul -@if exist $(DLL_OBJ_DIR)\*.obj $(DEL) $(DLL_OBJ_DIR)\*.obj > nul -@if exist $(DLL_OBJ_DIR)\*.c $(DEL) $(DLL_OBJ_DIR)\*.c > nul -@if exist $(DLL_OBJ_DIR)\*.h $(DEL) $(DLL_OBJ_DIR)\*.h > nul # -@if exist make_b32.log $(DEL) make_b32.log #********************************************************** # # LIBRARY Targets BUILD rules # #********************************************************** $(COMMON_LIB) : $(COMMON_LIB_OBJS) $(HIDE)IF EXIST "$(COMMON_LIB)" $(DEL) "$(COMMON_LIB)" > NUL $(HIDE)$(MKLIB) "$(COMMON_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(PP_LIB) : $(PP_LIB_OBJS) $(HIDE)IF EXIST "$(PP_LIB)" $(DEL) "$(PP_LIB)" > NUL $(HIDE)$(MKLIB) "$(PP_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(VM_LIB) :: BasicExes $(VM_LIB) :: $(VM_LIB_OBJS) $(HIDE)IF EXIST "$(VM_LIB)" $(DEL) "$(VM_LIB)" > NUL $(HIDE)$(MKLIB) "$(VM_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(RTL_LIB) :: BasicExes $(RTL_LIB) :: $(RTL_LIB_OBJS) $(HIDE)IF EXIST "$(RTL_LIB)" $(DEL) "$(RTL_LIB)" > NUL $(HIDE)$(MKLIB) "$(RTL_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(MACRO_LIB) : $(MACRO_LIB_OBJS) $(HIDE)IF EXIST "$(MACRO_LIB)" $(DEL) "$(MACRO_LIB)" > NUL $(HIDE)$(MKLIB) "$(MACRO_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(DEBUG_LIB) :: BasicExes $(DEBUG_LIB) :: $(DEBUG_LIB_OBJS) $(HIDE)IF EXIST "$(DEBUG_LIB)" $(DEL) "$(DEBUG_LIB)" > NUL $(HIDE)$(MKLIB) "$(DEBUG_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(LANG_LIB) : $(LANG_LIB_OBJS) $(HIDE)IF EXIST "$(LANG_LIB)" $(DEL) "$(LANG_LIB)" > NUL $(HIDE)$(MKLIB) "$(LANG_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(CODEPAGE_LIB) : $(CODEPAGE_LIB_OBJS) $(HIDE)IF EXIST "$(CODEPAGE_LIB)" $(DEL) "$(CODEPAGE_LIB)" > NUL $(HIDE)$(MKLIB) "$(CODEPAGE_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(RDD_LIB) :: BasicExes $(RDD_LIB) :: $(RDD_LIB_OBJS) $(HIDE)IF EXIST "$(RDD_LIB)" $(DEL) "$(RDD_LIB)" > NUL $(HIDE)$(MKLIB) "$(RDD_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(NULSYS_LIB) : $(NULSYS_LIB_OBJS) $(HIDE)IF EXIST "$(NULSYS_LIB)" $(DEL) "$(NULSYS_LIB)" > NUL $(HIDE)$(MKLIB) "$(NULSYS_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(DBFNTX_LIB) :: BasicExes $(DBFNTX_LIB) :: $(DBFNTX_LIB_OBJS) $(HIDE)IF EXIST "$(DBFNTX_LIB)" $(DEL) "$(DBFNTX_LIB)" > NUL $(HIDE)$(MKLIB) "$(DBFNTX_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(DBFCDX_LIB) : $(DBFCDX_LIB_OBJS) $(HIDE)IF EXIST "$(DBFCDX_LIB)" $(DEL) "$(DBFCDX_LIB)" > NUL $(HIDE)$(MKLIB) "$(DBFCDX_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(DBFFPT_LIB) : $(DBFFPT_LIB_OBJS) $(HIDE)IF EXIST "$(DBFFPT_LIB)" $(DEL) "$(DBFFPT_LIB)" > NUL $(HIDE)$(MKLIB) "$(DBFFPT_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(HBSIX_LIB) : $(HBSIX_LIB_OBJS) $(HIDE)IF EXIST "$(HBSIX_LIB)" $(DEL) "$(HBSIX_LIB)" > NUL $(HIDE)$(MKLIB) "$(HBSIX_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(HSX_LIB) : $(HSX_LIB_OBJS) $(HIDE)IF EXIST "$(HSX_LIB)" $(DEL) "$(HSX_LIB)" > NUL $(HIDE)$(MKLIB) "$(HSX_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(USRRDD_LIB) : $(USRRDD_LIB_OBJS) $(HIDE)IF EXIST "$(USRRDD_LIB)" $(DEL) "$(USRRDD_LIB)" > NUL $(HIDE)$(MKLIB) "$(USRRDD_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(GTCGI_LIB) : $(GTCGI_LIB_OBJS) $(HIDE)IF EXIST "$(GTCGI_LIB)" $(DEL) "$(GTCGI_LIB)" > NUL $(HIDE)$(MKLIB) "$(GTCGI_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(GTDOS_LIB) : $(GTDOS_LIB_OBJS) $(HIDE)IF EXIST "$(GTDOS_LIB)" $(DEL) "$(GTDOS_LIB)" > NUL $(HIDE)$(MKLIB) "$(GTDOS_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(GTPCA_LIB) : $(GTPCA_LIB_OBJS) $(HIDE)IF EXIST "$(GTPCA_LIB)" $(DEL) "$(GTPCA_LIB)" > NUL $(HIDE)$(MKLIB) "$(GTPCA_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(GTSTD_LIB) : $(GTSTD_LIB_OBJS) $(HIDE)IF EXIST "$(GTSTD_LIB)" $(DEL) "$(GTSTD_LIB)" > NUL $(HIDE)$(MKLIB) "$(GTSTD_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(GTWIN_LIB) : $(GTWIN_LIB_OBJS) $(HIDE)IF EXIST "$(GTWIN_LIB)" $(DEL) "$(GTWIN_LIB)" > NUL $(HIDE)$(MKLIB) "$(GTWIN_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(GTWVT_LIB) : $(GTWVT_LIB_OBJS) $(HIDE)IF EXIST "$(GTWVT_LIB)" $(DEL) "$(GTWVT_LIB)" > NUL $(HIDE)$(MKLIB) "$(GTWVT_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** $(GTGUI_LIB) : $(GTGUI_LIB_OBJS) $(HIDE)IF EXIST "$(GTGUI_LIB)" $(DEL) "$(GTGUI_LIB)" > NUL $(HIDE)$(MKLIB) "$(GTGUI_LIB)" $(ARFLAGS) @&&! +$(**: = &^ +) ! #********************************************************** # # EXECUTABLE Targets # #********************************************************** # # HARBOUR build rule # $(HARBOUR_EXE) :: BasicLibs $(HARBOUR_EXE) :: $(HARBOUR_EXE_OBJS) $(HIDE)IF EXIST "$(HARBOUR_EXE)" $(DEL) "$(HARBOUR_EXE)" > NUL $(HIDE)$(CC) @&&! $(CFLAGS) -e$(HARBOUR_EXE) $(**: = ^ ) $(COMMON_LIB) $(PP_LIB) ! #********************************************************** # # HBPP build rule # $(HBPP_EXE) :: BasicLibs $(HBPP_EXE) :: $(HBPP_EXE_OBJS) $(HIDE)IF EXIST "$(HBPP_EXE)" $(DEL) "$(HBPP_EXE)" > NUL $(HIDE)$(CC) @&&! $(CFLAGS) -e$(HBPP_EXE) $(**: = ^ ) $(COMMON_LIB) $(PP_LIB) ! #********************************************************** # # HBRUN build rule # $(HBRUN_EXE) :: BasicLibs BasicExes StdLibs $(HBRUN_EXE) :: $(HBRUN_EXE_OBJS) $(HIDE)IF EXIST "$(HBRUN_EXE)" $(DEL) "$(HBRUN_EXE)" > NUL $(HIDE)$(CC) @&&! $(CFLAGS) -e$(HBRUN_EXE) $(**: = ^ ) $(STANDARD_STATIC_HBLIBS) ! #********************************************************** # # HBTEST build rule # $(HBTEST_EXE) :: BasicLibs BasicExes StdLibs $(HBTEST_EXE) :: $(HBTEST_EXE_OBJS) $(HIDE)IF EXIST "$(HBTEST_EXE)" $(DEL) "$(HBTEST_EXE)" > NUL $(HIDE)$(CC) @&&! $(CFLAGS) -e$(HBTEST_EXE) $(**: = ^ ) $(STANDARD_STATIC_HBLIBS) ! #********************************************************** # # HBDOC build rule # $(HBDOC_EXE) :: BasicLibs BasicExes StdLibs $(HBDOC_EXE) :: $(HBDOC_EXE_OBJS) $(HIDE)IF EXIST "$(HBDOC_EXE)" $(DEL) "$(HBDOC_EXE)" > NUL $(HIDE)$(CC) @&&! $(CFLAGS) -e$(HBDOC_EXE) $(**: = ^ ) $(STANDARD_STATIC_HBLIBS) ! #********************************************************** # # HBMAKE build rule # $(HBMAKE_EXE) :: BasicLibs BasicExes StdLibs $(HBMAKE_EXE) :: $(HBMAKE_EXE_OBJS) $(HIDE)IF EXIST "$(HBMAKE_EXE)" $(DEL) "$(HBMAKE_EXE)" > NUL $(HIDE)$(CC) @&&! $(CFLAGS) -e$(HBMAKE_EXE) $(**: = ^ ) $(STANDARD_STATIC_HBLIBS) ! #********************************************************** # # HBVER build rule # $(HBVER_EXE) :: BasicLibs BasicExes StdLibs $(HBVER_EXE) :: $(HBVER_EXE_OBJS) $(HIDE)IF EXIST "$(HBVER_EXE)" $(DEL) "$(HBVER_EXE)" > NUL $(HIDE)$(CC) @&&! $(CFLAGS) -e$(HBVER_EXE) $(**: = ^ ) $(STANDARD_STATIC_HBLIBS) ! #********************************************************** # # DLL Targets # #********************************************************** $(HARBOUR_DLL) :: BasicLibs BasicExes $(HARBOUR_DLL) :: $(DLL_OBJS) $(HIDE)$(LINKER) $(LDFLAGSDLL) @&&! $** c0d32.obj, $@,, cw32.lib import32.lib ! #********************************************************** #********************************************************** #********************************************************** # EXTRA Object's DEPENDENCIES #********************************************************** $(OBJ_DIR)\macroy.c : $(MACRO_DIR)\macro.y $(HIDE)bison --no-line -p hb_comp -d $** -o$@ $(OBJ_DIR)\macrol.c : $(MACRO_DIR)\macro.l $(HIDE)flex -Phb_comp -i -8 -o$@ $** $(OBJ_DIR)\macroy.obj : $(OBJ_DIR)\macroy.c $(OBJ_DIR)\macrol.obj : $(OBJ_DIR)\macrol.c $(HIDE)$(ECHO) > $(OBJ_DIR)\unistd.h $(HIDE)$(CC) $(CLIBFLAGS) -I$(OBJ_DIR) -o$@ $** $(HIDE)$(DEL) $(OBJ_DIR)\unistd.h #********************************************************** $(OBJ_DIR)\harboury.c : $(HARBOUR_DIR)\harbour.y $(HIDE)bison --no-line -d $** -o$@ $(OBJ_DIR)\harbourl.c : $(HARBOUR_DIR)\harbour.l $(HIDE)flex -i -8 -o$@ $** $(OBJ_DIR)\harboury.obj : $(OBJ_DIR)\harboury.c $(OBJ_DIR)\harbourl.obj : $(OBJ_DIR)\harbourl.c $(HIDE)$(ECHO) > $(OBJ_DIR)\unistd.h $(HIDE)$(CC) $(CLIBFLAGS) -I$(OBJ_DIR) -o$@ $** $(HIDE)$(DEL) $(OBJ_DIR)\unistd.h #********************************************************** $(DLL_OBJ_DIR)\macroy.c : $(MACRO_DIR)\macro.y $(HIDE)bison --no-line -p hb_comp -d $** -o$@ $(DLL_OBJ_DIR)\macrol.c : $(MACRO_DIR)\macro.l $(HIDE)flex -Phb_comp -i -8 -o$@ $** $(DLL_OBJ_DIR)\macroy.obj : $(DLL_OBJ_DIR)\macroy.c $(DLL_OBJ_DIR)\macrol.obj : $(DLL_OBJ_DIR)\macrol.c $(HIDE)$(ECHO) > $(DLL_OBJ_DIR)\unistd.h $(HIDE)$(CC) $(CLIBFLAGS) -I$(DLL_OBJ_DIR) -o$@ $** $(HIDE)$(DEL) $(DLL_OBJ_DIR)\unistd.h #********************************************************** $(DLL_OBJ_DIR)\harboury.c : $(HARBOUR_DIR)\harbour.y $(HIDE)bison --no-line -d $** -o$@ $(DLL_OBJ_DIR)\harbourl.c : $(HARBOUR_DIR)\harbour.l $(HIDE)flex -i -8 -o$@ $** $(DLL_OBJ_DIR)\harboury.obj : $(DLL_OBJ_DIR)\harboury.c $(DLL_OBJ_DIR)\harbourl.obj : $(DLL_OBJ_DIR)\harbourl.c $(HIDE)$(ECHO) > $(DLL_OBJ_DIR)\unistd.h $(HIDE)$(CC) $(CLIBFLAGS) -I$(DLL_OBJ_DIR) -o$@ $** $(HIDE)$(DEL) $(DLL_OBJ_DIR)\unistd.h #**********************************************************