Files
harbour-core/harbour/config/rules.mk
Viktor Szakats 47776af691 2012-03-31 18:42 UTC+0200 Viktor Szakats (harbour syenar.net)
* utils/hbmk2/hbmk2.prg
    + will now add lib/3rd dir to the link commands, so
      unicows lib will be found in uninstalled Harbour SVN
      source tree.

  * contrib/make.hbs
  * contrib/hbpost.hbm
    + automatically enable unicows support for contribs, if available.
    - deleted support for undocumented __HB_BUILD_WINUNI envvar

  * config/global.mk
  * config/rules.mk
    - deleted support for undocumented __HB_BUILD_WINUNI envvar

  * package/winuni/mpkg_win_uni.bat
  * package/mpkg_win_nightly.bat
    - deleted special support for unicows libs for nightly
      and official releases, along with HB_DIR_UNICOWS envvar.
      Now these libs are included in all builds.

  * config/win/global.mk
    + automatically enable unicows support for core, if available.

  * config/win/xcc.mk
  * config/win/icc.mk
  * config/win/mingw.mk
  * config/win/pocc.mk
  * config/win/bcc.mk
  * config/win/msvc.mk
    + added support for SYSLIBPATHS. (used by unicows support)
    ! fixed bcc dynlib link command missing libpaths.
    ; NOTE: watcom unicows support is missing, as it needs
            special tricks due to missing separate libpath option
            in this compiler/linker.

  * config/wce/mingwarm.mk
  * config/wce/poccarm.mk
  * config/wce/msvcarm.mk
    * synced with config/win files

  + config/libbin.mk
    + added rule to install pre-built binary libs.
      (for unicows libs)

  * Makefile
  + lib/3rd
  + lib/3rd/win
  + lib/3rd/win/mingw
  + lib/3rd/win/mingw/Makefile
  + lib/3rd/win/mingw/libunicows.a
  + lib/3rd/win/mingw/libunicows_license.txt
  + lib/3rd/win/bcc
  + lib/3rd/win/bcc/unicows_license.txt
  + lib/3rd/win/bcc/unicows.lib
  + lib/3rd/win/bcc/Makefile
    + added locally hosted unicows runtime/implibs from:
      http://libunicows.sourceforge.net/ by author Vaclav Slavik.
      With these libs, it's possible to use UNICODE builds
      with both MS unicows.dll and opencows .dll on legacy
      Windows-system (Win9x).
      These libs will be installed to Harbour core lib directory,
      and also used from lib/3rd directory, if they are available.
      I've uploaed mingw and bcc libs because these are used
      nearly exclusively by users, but they are also available
      for older msvc, watcom, dmc and lcc compilers. I don't
      think it's worth the extra size to support Win9x using
      these legacy compilers, anyhow they can be added easily
      if needed (except watcom, which requires more work).

  ; These changes mean three things:
    1. Harbour now has only one build mode on Windows: UNICODE
       This will greatly simplify coding and testing and will
       allow to focus much better on what's important. It also
       allows to drop lots of dual code dealing with separate
       UNICODE and non-UNICODE branches.
    2. Harbour default builds will now run on Win9x (currently
       when using mingw or bcc compilers), though UNICOWS.DLL
       is now required. See INSTALL how to get this free .dll
       from MS. This also means that Harbour can now theoretically
       by built on Win9x systems (I didn't try).
    3. Harbour users can create UNICODE builds compatible with
       Win9x, by simply adding -lunicows to their .hbp projects.
       No extra installation is required.
2012-03-31 16:43:33 +00:00

153 lines
3.8 KiB
Makefile

#
# $Id$
#
# How to run yacc.
YACC := bison
YACC_FLAGS := -d $(YACC_FLAGS)
ifeq ($(HB_BUILD_DEBUG),yes)
HB_CFLAGS := -DHB_TR_LEVEL_DEBUG $(HB_CFLAGS)
else
ifneq ($(HB_COMPILER),pcc)
HB_PRGFLAGS := -l $(HB_PRGFLAGS)
endif
endif
# Handle it here, so that it can be disabled for individual libs
ifeq ($(HB_PLATFORM),win)
HB_CFLAGS += -DUNICODE
endif
ifeq ($(HB_DYN_COPT),)
OBJ_DYN_POSTFIX :=
else
OBJ_DYN_POSTFIX := _dyn
endif
# How to run Harbour
HB := $(HB_HOST_BIN_DIR)/harbour$(HB_HOST_BIN_EXT)
HB_FLAGS := -n1 -q0 -w3 -es2 -kmo -i- $(HB_PRGFLAGS)
HB_RULE = $(HB) $? $(HB_INC_DEPEND) -i$(HB_HOST_INC) $(HB_FLAGS) $(HB_USER_PRGFLAGS)
# Use default rules if platform/compiler specific rule is not defined
CC_FLAGS := $(HB_INC_DEPEND) $(CFLAGS) $(HB_CFLAGS)
# The rule to compile a C source file.
ifeq ($(CC_RULE),)
CC_RULE = $(CC) $(subst $(CC_DIRSEPFROM),$(CC_DIRSEPTO),$(CC_FLAGS) $(HB_USER_CFLAGS) $(CC_OUT)$(<F:.c=$(OBJ_EXT)) $(HB_CFLAGS_STA) $(CC_IN) $<)
ifneq ($(HB_BUILD_DYN),no)
ifneq ($(HB_DYN_COPT),)
ifneq ($(LIBNAME),)
ifneq ($(filter $(LIBNAME),$(HB_DYN_LIBS)),)
define cc_comp_all
$(CC) $(subst $(CC_DIRSEPFROM),$(CC_DIRSEPTO),$(CC_FLAGS) $(HB_USER_CFLAGS) $(CC_OUT)$(<F:.c=$(OBJ_EXT)) $(HB_CFLAGS_STA) $(CC_IN) $<)
$(CC) $(subst $(CC_DIRSEPFROM),$(CC_DIRSEPTO),$(CC_FLAGS) $(HB_USER_CFLAGS) $(CC_OUT)$(<F:.c=$(OBJ_DYN_POSTFIX)$(OBJ_EXT)) $(HB_DYN_COPT) $(HB_CFLAGS_DYN) $(CC_IN) $<)
endef
CC_RULE = $(cc_comp_all)
endif
endif
endif
endif
endif
ifeq ($(S_RULE),)
S_RULE = $(CC) $(subst $(CC_DIRSEPFROM),$(CC_DIRSEPTO),$(CC_FLAGS) $(HB_USER_CFLAGS) $(CC_OUT)$(<F:.s=$(OBJ_EXT)) $(HB_CFLAGS_STA) $(CC_IN) $<)
endif
ifeq ($(SX_RULE),)
SX_RULE = $(CC) $(subst $(CC_DIRSEPFROM),$(CC_DIRSEPTO),$(CC_FLAGS) $(HB_USER_CFLAGS) $(CC_OUT)$(<F:.sx=$(OBJ_EXT)) $(HB_CFLAGS_STA) -x assembler-with-cpp $(CC_IN) $<)
endif
# The rule to compile a C++ source file.
ifeq ($(CPP_RULE),)
ifeq ($(CXX),)
CXX := $(CC)
endif
CPP_RULE = $(CXX) $(CC_FLAGS) $(HB_USER_CFLAGS) $(CC_OUT)$(<F:.cpp=$(OBJ_EXT)) $(CC_IN) $<
endif
# The rule to compile an Objective C source file.
ifeq ($(OBJC_RULE),)
OBJC := $(CC)
OBJC_RULE = $(OBJC) $(CC_FLAGS) $(HB_USER_CFLAGS) $(CC_OUT)$(<F:.m=$(OBJ_EXT)) $(CC_IN) $<
endif
# The rule to compile resources.
ifneq ($(RC),)
ifeq ($(RC_RULE),)
RC_RULE = $(RC) $(RCFLAGS) $(HB_RCFLAGS) $(HB_USER_RESFLAGS) $(RC_OUT)$(<F:.rc=$(RES_EXT)) $<
endif
endif
# The rule to link an executable.
ifeq ($(LD_RULE),)
LD_RULE = $(LD) $(LDFLAGS) $(HB_LDFLAGS) $(HB_USER_LDFLAGS) $(LD_OUT)$(subst /,$(DIRSEP),$(BIN_DIR)/$@) $(^F) $(LDLIBS) $(LDSTRIP)
endif
# Eliminate these rules.
%.c : %.y
# Rule to generate an object file from a C source file in the parent.
%$(OBJ_EXT) : $(GRANDP)%.c
$(CC_RULE)
# Rule to generate an object file from a C source file.
%$(OBJ_EXT) : %.c
$(CC_RULE)
# Rules for CPP files
%$(OBJ_EXT) : $(GRANDP)%.cpp
$(CPP_RULE)
%$(OBJ_EXT) : %.cpp
$(CPP_RULE)
# Rules for Objective C files
%$(OBJ_EXT) : $(GRANDP)%.m
$(OBJC_RULE)
%$(OBJ_EXT) : %.m
$(OBJC_RULE)
# Rules for resource files
%$(RES_EXT) : $(GRANDP)%.rc
$(RC_RULE)
# Rule to generate an object file from a assembler .s file.
%$(OBJ_EXT) : $(GRANDP)%.s
$(S_RULE)
%$(OBJ_EXT) : %.s
$(S_RULE)
# Rule to generate an object file from a assembler .sx file.
%$(OBJ_EXT) : $(GRANDP)%.sx
$(SX_RULE)
%$(OBJ_EXT) : %.sx
$(SX_RULE)
%$(RES_EXT) : %.rc
$(RC_RULE)
_RES := no
ifneq ($(RES_EXT),)
ifneq ($(ALL_RC_OBJS),)
_RES := yes
endif
endif
# Rule to generate an executable file from an object file.
ifeq ($(_RES),yes)
%$(BIN_EXT) : %$(OBJ_EXT) %$(RES_EXT)
$(LD_RULE)
else
%$(BIN_EXT) : %$(OBJ_EXT)
$(LD_RULE)
endif
# Rule to generate a C file from a PRG file.
%.c : $(GRANDP)%.prg
$(HB_RULE)