diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 6d42bd3d71..5b907dfec5 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,25 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-09-08 23:23 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + ! Fixed to use 'rc' AR cmd on sunos. (instead of 'rcs') + + Added -hbdyn support for gcc family of compilers. (very light testing with mingw) + + Added sunpro compiler support. (not tested, bazaar style) + ! Basic CPU detection fixed for clang. + + Added TOFIX for CPU detection for *nix based gcc, icc, clang, sunpro + compilers. + + * config/wce/mingwarm.mk + * config/hpux/gcc.mk + * config/win/mingw.mk + * config/linux/gcc.mk + * config/linux/icc.mk + * config/linux/sunpro.mk + * config/sunos/gcc.mk + * config/sunos/sunpro.mk + * Minor: AR cmd chars reordered to be in sync with hbmk2. + 2009-09-08 14:56 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * config/darwin/clang.mk + Added comment with option to force C++ mode with clang. diff --git a/harbour/config/hpux/gcc.mk b/harbour/config/hpux/gcc.mk index fcb407d08a..eb667c088e 100644 --- a/harbour/config/hpux/gcc.mk +++ b/harbour/config/hpux/gcc.mk @@ -48,7 +48,7 @@ LDFLAGS += $(foreach dir,$(LIBPATHS) $(SYSLIBPATHS),-L$(dir)) AR := $(HB_CCPREFIX)ar ARFLAGS := -AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) cr $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) +AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) rc $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) DY := $(CC) DFLAGS := -shared -fPIC $(foreach dir,$(SYSLIBPATHS),-L$(dir)) diff --git a/harbour/config/linux/gcc.mk b/harbour/config/linux/gcc.mk index 25db5f4e41..59fc90355f 100644 --- a/harbour/config/linux/gcc.mk +++ b/harbour/config/linux/gcc.mk @@ -46,7 +46,7 @@ LDFLAGS += $(foreach dir,$(LIBPATHS) $(SYSLIBPATHS),-L$(dir)) AR := $(HB_CCPREFIX)ar ARFLAGS := -AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) crs $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) +AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) rcs $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) DY := $(CC) DFLAGS := -shared -fPIC $(foreach dir,$(SYSLIBPATHS),-L$(dir)) diff --git a/harbour/config/linux/icc.mk b/harbour/config/linux/icc.mk index 36453b822a..d6c3b1b676 100644 --- a/harbour/config/linux/icc.mk +++ b/harbour/config/linux/icc.mk @@ -51,7 +51,7 @@ LDFLAGS += $(foreach dir,$(LIBPATHS) $(SYSLIBPATHS),-L$(dir)) AR := xiar ARFLAGS := -AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) crs $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) +AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) rcs $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) DY := $(CC) DFLAGS := -shared -fPIC $(foreach dir,$(SYSLIBPATHS),-L$(dir)) diff --git a/harbour/config/linux/sunpro.mk b/harbour/config/linux/sunpro.mk index d094705b3d..0942f80f99 100644 --- a/harbour/config/linux/sunpro.mk +++ b/harbour/config/linux/sunpro.mk @@ -71,7 +71,7 @@ LDFLAGS += $(foreach dir,$(LIBPATHS) $(SYSLIBPATHS),-L$(dir)) AR := ar ARFLAGS := -AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) crs $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) +AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) rcs $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) DY := $(CC) DFLAGS := -G -KPIC $(HB_ISAOPT) $(foreach dir,$(SYSLIBPATHS),-L$(dir)) diff --git a/harbour/config/sunos/gcc.mk b/harbour/config/sunos/gcc.mk index fa9bc7e616..8b3b06a8e3 100644 --- a/harbour/config/sunos/gcc.mk +++ b/harbour/config/sunos/gcc.mk @@ -46,7 +46,7 @@ LDFLAGS += $(foreach dir,$(LIBPATHS) $(SYSLIBPATHS),-L$(dir)) AR := $(HB_CCPREFIX)ar ARFLAGS := -AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) cr $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) +AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) rc $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) DY := $(CC) DFLAGS := -shared -fPIC $(foreach dir,$(SYSLIBPATHS),-L$(dir)) diff --git a/harbour/config/sunos/sunpro.mk b/harbour/config/sunos/sunpro.mk index b51242eba4..8a05503dd7 100644 --- a/harbour/config/sunos/sunpro.mk +++ b/harbour/config/sunos/sunpro.mk @@ -77,7 +77,7 @@ LDFLAGS += $(foreach dir,$(LIBPATHS) $(SYSLIBPATHS),-L$(dir)) AR := ar ARFLAGS := -AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) cr $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) +AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) rc $(LIB_DIR)/$@ $(^F) || ( $(RM) $(LIB_DIR)/$@ && false ) DY := $(CC) DFLAGS := -G $(HB_ISAOPT) $(foreach dir,$(SYSLIBPATHS),-L$(dir)) diff --git a/harbour/config/wce/mingwarm.mk b/harbour/config/wce/mingwarm.mk index 6bcc3c0630..094aecfa80 100644 --- a/harbour/config/wce/mingwarm.mk +++ b/harbour/config/wce/mingwarm.mk @@ -44,7 +44,7 @@ LDFLAGS += $(LIBPATHS) AR := $(HB_CCPATH)$(HB_CCPREFIX)ar ARFLAGS := -AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) crs $(LIB_DIR)/$@ $(^F) || $(RM) $(subst /,$(DIRSEP),$(LIB_DIR)/$@) +AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) rcs $(LIB_DIR)/$@ $(^F) || $(RM) $(subst /,$(DIRSEP),$(LIB_DIR)/$@) DY := $(CC) DFLAGS := -shared diff --git a/harbour/config/win/mingw.mk b/harbour/config/win/mingw.mk index c5776d5ed0..c430cc8135 100644 --- a/harbour/config/win/mingw.mk +++ b/harbour/config/win/mingw.mk @@ -53,7 +53,7 @@ LDFLAGS += $(LIBPATHS) AR := $(HB_CCPATH)$(HB_CCPREFIX)ar ARFLAGS := -AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) crs $(LIB_DIR)/$@ $(^F) || $(RM) $(subst /,$(DIRSEP),$(LIB_DIR)/$@) +AR_RULE = $(AR) $(ARFLAGS) $(HB_USER_AFLAGS) rcs $(LIB_DIR)/$@ $(^F) || $(RM) $(subst /,$(DIRSEP),$(LIB_DIR)/$@) DY := $(CC) DFLAGS := -shared diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index f46afcb8f5..0784ca865d 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -2060,7 +2060,11 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) ELSE cBin_Lib := hbmk[ _HBMK_cCCPREFIX ] + "ar" ENDIF - cOpt_Lib := "{FA} rcs {OL} {LO}" + IF hbmk[ _HBMK_cPLAT ] == "sunos" + cOpt_Lib := "{FA} rc {OL} {LO}" + ELSE + cOpt_Lib := "{FA} rcs {OL} {LO}" + ENDIF ENDIF DO CASE CASE hbmk[ _HBMK_cCOMP ] == "icc" @@ -2082,20 +2086,22 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) ELSE cOpt_CompC += " {LC}" ENDIF + cBin_Dyn := cBin_CompC + cOpt_Dyn := "-shared -fPIC {FD} -o {OD} {DL} {LO} {LS}" cBin_Link := cBin_CompC cOpt_Link := "{LO} {LA} {FL} {DL}" cLibPathPrefix := "-L" cLibPathSep := " " cLibLibExt := ".a" - IF ! lStopAfterCComp - IF l_lLIBGROUPING .AND. ; - ( hbmk[ _HBMK_cPLAT ] == "linux" .OR. ; - hbmk[ _HBMK_cPLAT ] == "bsd" ) - AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--start-group {LL} {LB} -Wl,--end-group" ) - ELSE - AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) - l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) - ENDIF + IF l_lLIBGROUPING .AND. ; + ( hbmk[ _HBMK_cPLAT ] == "linux" .OR. ; + hbmk[ _HBMK_cPLAT ] == "bsd" ) + AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--start-group {LL} {LB} -Wl,--end-group" ) + AAdd( hbmk[ _HBMK_aOPTD ], "-Wl,--start-group {LL} {LB} -Wl,--end-group" ) + ELSE + AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) + AAdd( hbmk[ _HBMK_aOPTD ], "{LL} {LB}" ) + l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) ENDIF IF hbmk[ _HBMK_lMAP ] IF hbmk[ _HBMK_cPLAT ] == "darwin" @@ -2242,6 +2248,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) ELSE cOpt_CompC += " {LC}" ENDIF + cBin_Dyn := cBin_CompC + cOpt_Dyn := "-shared {FD} -o {OD} {DL} {LO} {LS}" cBin_Link := cBin_CompC cOpt_Link := "{LO} {LA} {LS} {FL} {DL}" cLibPathPrefix := "-L" @@ -2274,13 +2282,13 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) IF hbmk[ _HBMK_lSHARED ] AAdd( hbmk[ _HBMK_aLIBPATH ], l_cHB_BIN_INSTALL ) ENDIF - IF ! lStopAfterCComp - IF l_lLIBGROUPING .AND. hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm" - AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--start-group {LL} {LB} -Wl,--end-group" ) - ELSE - AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) - l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) - ENDIF + IF l_lLIBGROUPING .AND. hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm" + AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--start-group {LL} {LB} -Wl,--end-group" ) + AAdd( hbmk[ _HBMK_aOPTD ], "-Wl,--start-group {LL} {LB} -Wl,--end-group" ) + ELSE + AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) + AAdd( hbmk[ _HBMK_aOPTD ], "{LL} {LB}" ) + l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) ENDIF IF hbmk[ _HBMK_lSTRIP ] AAdd( hbmk[ _HBMK_aOPTL ], "-s" ) @@ -2339,6 +2347,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) ELSE cOpt_CompC += " {LC}" ENDIF + cBin_Dyn := cBin_CompC + cOpt_Dyn := "-shared {FD} -o {OD} {DL} {LO} {LL} {LB} {LS}" cBin_Link := cBin_CompC cOpt_Link := "{LO} {LA} {FL} {DL}" cLibPathPrefix := "-L" @@ -2904,7 +2914,119 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) CASE ( hbmk[ _HBMK_cPLAT ] == "sunos" .AND. hbmk[ _HBMK_cCOMP ] == "sunpro" ) .OR. ; ( hbmk[ _HBMK_cPLAT ] == "linux" .AND. hbmk[ _HBMK_cCOMP ] == "sunpro" ) - /* TODO */ + nCmd_Esc := _ESC_NIX + IF hbmk[ _HBMK_lDEBUG ] + AAdd( hbmk[ _HBMK_aOPTC ], "-g" ) + ENDIF + cLibLibPrefix := "lib" + cLibPrefix := "-l" + cLibExt := "" + cObjExt := ".o" + cBin_Lib := "ar" + IF hbmk[ _HBMK_cPLAT ] == "linux" + cOpt_Lib := "{FA} rcs {OL} {LO}" + ELSE + cOpt_Lib := "{FA} rc {OL} {LO}" + ENDIF + cBin_CompC := hbmk[ _HBMK_cCCPREFIX ] + iif( hbmk[ _HBMK_lCPP ] != NIL .AND. hbmk[ _HBMK_lCPP ], "sunCC", "suncc" ) + hbmk[ _HBMK_cCCPOSTFIX ] + cOpt_CompC := "-c {FC}" + IF hbmk[ _HBMK_lOPTIM ] + AAdd( hbmk[ _HBMK_aOPTC ], "-fast" ) + AAdd( hbmk[ _HBMK_aOPTC ], "-xnolibmopt" ) + AAdd( hbmk[ _HBMK_aOPTD ], "-fast" ) + AAdd( hbmk[ _HBMK_aOPTD ], "-xnolibmopt" ) + ENDIF + AAdd( hbmk[ _HBMK_aOPTC ], "-KPIC" ) + IF hbmk[ _HBMK_lINC ] .AND. ! Empty( cWorkDir ) + cOpt_CompC += " {IC} -o {OO}" + ELSE + cOpt_CompC += " {LC}" + ENDIF + cBin_Link := cBin_CompC + cOpt_Link := "{LO} {LA} {FL} {DL}" + cLibPathPrefix := "-L" + cLibPathSep := " " + cLibLibExt := ".a" + cBin_Dyn := cBin_CompC + cOpt_Dyn := "-G {FD} -o {OD} {DL} {LO} {LL} {LB} {LS}" + IF hbmk[ _HBMK_cPLAT ] == "linux" + AAdd( hbmk[ _HBMK_aOPTD ], "-KPIC" ) + ENDIF + IF ! lStopAfterCComp + AAdd( hbmk[ _HBMK_aOPTL ], "{LL} {LB}" ) + l_aLIBHBBASE_2 := iif( hbmk[ _HBMK_lMT ], aLIB_BASE_2_MT, aLIB_BASE_2 ) + ENDIF + IF hbmk[ _HBMK_lMAP ] + AAdd( hbmk[ _HBMK_aOPTL ], "-M{OM}" ) + ENDIF + /* + IF hbmk[ _HBMK_lSTATICFULL ] + AAdd( hbmk[ _HBMK_aOPTL ], "-static" ) + ENDIF + */ + IF hbmk[ _HBMK_lSTRIP ] + AAdd( hbmk[ _HBMK_aOPTL ], "-s" ) + ENDIF + IF lStopAfterCComp + IF ! lCreateLib .AND. ! lCreateDyn .AND. ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) ) == 1 + AAdd( hbmk[ _HBMK_aOPTC ], "-o {OO}" ) + ENDIF + ELSE + AAdd( hbmk[ _HBMK_aOPTL ], "-o {OE}" ) + ENDIF + + DO CASE + CASE "-DHB_PCRE_REGEX" $ cSelfFlagC + AAdd( l_aLIBSYS, "pcre" ) + l_lHB_PCRE := .F. + CASE "-DHB_POSIX_REGEX" $ cSelfFlagC + l_lHB_PCRE := .F. + ENDCASE + IF "-DHB_EXT_ZLIB" $ cSelfFlagC + AAdd( l_aLIBSYS, "z" ) + l_lHB_ZLIB := .F. + ENDIF + IF "-DHB_HAS_GPM" $ cSelfFlagC + AAdd( l_aLIBSYS, "gpm" ) + ENDIF + + /* Add system libraries */ + IF ! hbmk[ _HBMK_lSHARED ] + AAdd( l_aLIBSYS, "m" ) + IF hbmk[ _HBMK_lMT ] + AAdd( l_aLIBSYS, "pthread" ) + ENDIF + DO CASE + CASE hbmk[ _HBMK_cPLAT ] == "linux" + AAdd( l_aLIBSYS, "rt" ) + AAdd( l_aLIBSYS, "dl" ) + CASE hbmk[ _HBMK_cPLAT ] == "sunos" + AAdd( l_aLIBSYS, "rt" ) + AAdd( l_aLIBSYS, "socket" ) + AAdd( l_aLIBSYS, "nsl" ) + AAdd( l_aLIBSYS, "resolv" ) + ENDCASE + ENDIF + + IF IsGTRequested( hbmk, "gtcrs" ) + /* TOFIX: Sometimes 'ncur194' is needed. */ + AAdd( l_aLIBSYS, IIF( hbmk[ _HBMK_cPLAT ] == "sunos", "curses", "ncurses" ) ) + ENDIF + IF IsGTRequested( hbmk, "gtsln" ) + AAdd( l_aLIBSYS, "slang" ) + ENDIF + IF IsGTRequested( hbmk, "gtxwc" ) + IF hbmk[ _HBMK_cPLAT ] == "linux" .AND. hb_DirExists( "/usr/X11R6/lib64" ) + AAdd( hbmk[ _HBMK_aLIBPATH ], "/usr/X11R6/lib64" ) + ENDIF + AAdd( hbmk[ _HBMK_aLIBPATH ], "/usr/X11R6/lib" ) + AAdd( l_aLIBSYS, "X11" ) + ENDIF + + IF ! Empty( hbmk[ _HBMK_cCCPATH ] ) + cBin_CompC := FN_Escape( hbmk[ _HBMK_cCCPATH ] + hb_osPathSeparator() + cBin_CompC, nCmd_Esc ) + cBin_Link := FN_Escape( hbmk[ _HBMK_cCCPATH ] + hb_osPathSeparator() + cBin_Link, nCmd_Esc ) + ENDIF ENDCASE @@ -6580,10 +6702,13 @@ FUNCTION hbmk_CPU( hbmk ) DO CASE CASE hbmk[ _HBMK_cPLAT ] $ "dos|os2" .OR. ; - hbmk[ _HBMK_cCOMP ] $ "gcc|cygwin|watcom|bcc|icc|xcc" .OR. ; - hbmk[ _HBMK_cCOMP ] == "mingw" .OR. ; - hbmk[ _HBMK_cCOMP ] == "msvc" .OR. ; - hbmk[ _HBMK_cCOMP ] == "pocc" + hbmk[ _HBMK_cCOMP ] $ "mingw|cygwin|msvc|pocc|watcom|bcc|xcc" .OR. ; + ( hbmk[ _HBMK_cPLAT ] == "win" .AND. hbmk[ _HBMK_cCOMP ] == "icc" ) + RETURN "x86" + CASE hbmk[ _HBMK_cCOMP ] $ "gcc|icc|clang|sunpro" + /* TOFIX: This isn't necessarily correct, since these inherit the + default CPU architecture from OS default, by and large, + and targets can be overridden using user options. */ RETURN "x86" CASE hbmk[ _HBMK_cCOMP ] == "mingw64" .OR. ; hbmk[ _HBMK_cCOMP ] == "msvc64" .OR. ;