diff --git a/.circleci/run.sh b/.circleci/run.sh index 873de6f1903..b0e6946e640 100755 --- a/.circleci/run.sh +++ b/.circleci/run.sh @@ -96,17 +96,17 @@ setup_repos() # run unittest with coverage coverage() { - make -f posix.mak clean + make clean # remove all existing coverage files (just in case) find . -name "*.lst" -type f -delete # Coverage information of the test runner can be missing for some template instatiations. # https://issues.dlang.org/show_bug.cgi?id=16397 - # ENABLE_COVERAGE="1" make -j"$N" -f posix.mak MODEL=$MODEL unittest-debug + # ENABLE_COVERAGE="1" make -j"$N" MODEL=$MODEL unittest-debug # So instead we run all tests individually (hoping that that doesn't break any tests). # -cov is enabled by the %.test target itself - make -j"$N" -f posix.mak BUILD=$BUILD $(find std etc -name "*.d" | sed "s/[.]d$/.test/") + make -j"$N" BUILD=$BUILD $(find std etc -name "*.d" | sed "s/[.]d$/.test/") # Remove coverage information from lines with non-deterministic coverage. # These lines are annotated with a comment containing "nocoverage". @@ -124,12 +124,12 @@ publictests() { source "$(CURL_USER_AGENT=\"$CURL_USER_AGENT\" bash ~/dlang/install.sh dmd-$HOST_DMD_VER --activate)" - make -f posix.mak -j"$N" publictests DUB="$DUB" BUILD=$BUILD - make -f posix.mak -j"$N" publictests DUB="$DUB" BUILD=$BUILD NO_BOUNDSCHECKS=1 + make -j"$N" publictests DUB="$DUB" BUILD=$BUILD + make -j"$N" publictests DUB="$DUB" BUILD=$BUILD NO_BOUNDSCHECKS=1 # run -betterC tests - make -f posix.mak test_extractor # build in single-threaded mode - make -f posix.mak -j"$N" betterc + make test_extractor # build in single-threaded mode + make -j"$N" betterc } # test stdx dub package diff --git a/.gitignore b/.gitignore index efcbaa7d841..81d7f2bb1ff 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ generated GNUmakefile .DS_Store .*.sw* -Makefile *.lst temp/ diff --git a/Makefile b/Makefile new file mode 100644 index 00000000000..2d6fdaadb10 --- /dev/null +++ b/Makefile @@ -0,0 +1,728 @@ +# This makefile is designed to be run by gnu make. +# - Windows: you may download a prebuilt zipped .exe from https://github.com/dlang/dmd/releases/download/nightly/gnumake-4.4-win64.zip. +# You also need a Git for Windows installation, for bash and common GNU tools like cp,mkdir,mv,rm,touch,which. +# - FreeBSD: the default make program on FreeBSD is not gnu make; to install gnu make: +# pkg install gmake +# and then run as gmake rather than make. +# +# make => makes release build of the library +# +# make clean => removes all targets built by the makefile +# +# make zip => creates a zip file of all the sources (not targets) +# referred to by the makefile, including the makefile +# +# make BUILD=debug => makes debug build of the library +# +# make unittest => builds all unittests (for debug AND release) and runs them +# +# make BUILD=debug unittest => builds all unittests (for debug) and runs them +# +# make DEBUGGER=ddd std/XXXXX.debug => builds the module XXXXX and executes it +# in the debugger ddd +# +# make build-html => makes html documentation +# +# make install => copies library to /usr/lib +# +# make std/somemodule.test => only builds and unittests std.somemodule +# +################################################################################ +# Configurable stuff, usually from the command line +# +# OS can be linux, windows, win32wine, osx, freebsd, netbsd or dragonflybsd. +# The system will be determined by using uname + +QUIET:=@ + +DEBUGGER=gdb +GIT_HOME=https://github.com/dlang +DMD_DIR=../dmd + +include $(DMD_DIR)/compiler/src/osmodel.mak + +ifeq (windows,$(OS)) + DOTEXE:=.exe + DOTOBJ:=.obj +else + DOTEXE:= + DOTOBJ:=.o +endif + +ifeq (osx,$(OS)) + export MACOSX_DEPLOYMENT_TARGET=10.9 +endif + +# Default to a release build, override with BUILD=debug +ifeq (,$(BUILD)) +BUILD_WAS_SPECIFIED=0 +BUILD=release +else +BUILD_WAS_SPECIFIED=1 +endif + +ifneq ($(BUILD),release) + ifneq ($(BUILD),debug) + $(error Unrecognized BUILD=$(BUILD), must be 'debug' or 'release') + endif +endif + +# default to PIC, use PIC=1/0 to en-/disable PIC. +# Note that shared libraries and C files are always compiled with PIC. +ifeq ($(PIC),) + PIC:=$(if $(findstring win,$(OS)),,1) +endif +ifeq ($(PIC),1) + override PIC:=-fPIC +else + override PIC:= +endif + +# Configurable stuff that's rarely edited +INSTALL_DIR = ../install +DRUNTIME_PATH = $(DMD_DIR)/druntime +DLANG_ORG_DIR = ../dlang.org +ZIPFILE = phobos.zip +ROOT_OF_THEM_ALL = generated +ROOT = $(ROOT_OF_THEM_ALL)/$(OS)/$(BUILD)/$(MODEL) +DUB=dub +TOOLS_DIR=../tools +DSCANNER_HASH=5a53c538d0aa832f03840840271b6631fbbfc53d +DSCANNER_DIR=$(ROOT_OF_THEM_ALL)/dscanner-$(DSCANNER_HASH) + +# Set DRUNTIME name and full path +ifneq (,$(DRUNTIME)) + CUSTOM_DRUNTIME=1 +endif +ifeq (,$(findstring win,$(OS))) + DRUNTIME = $(DRUNTIME_PATH)/../generated/$(OS)/$(BUILD)/$(MODEL)/libdruntime.a + DRUNTIMESO = $(basename $(DRUNTIME)).so.a +else + DRUNTIME = $(DRUNTIME_PATH)/../generated/$(OS)/$(BUILD)/$(MODEL)/druntime.lib +endif + +# Set CC and DMD +ifeq ($(OS),win32wine) + CC = wine dmc.exe + DMD = wine dmd.exe + RUN = wine +else + DMD = $(DMD_DIR)/generated/$(OS)/$(BUILD)/$(MODEL)/dmd$(DOTEXE) + ifeq ($(MODEL),32omf) + CC = dmc + else ifeq ($(OS),windows) + CC = cl.exe + else + CC = cc + endif + RUN = +endif + +# Set CFLAGS +OUTFILEFLAG = -o +NODEFAULTLIB=-defaultlib= -debuglib= +ifeq (,$(findstring win,$(OS))) + CFLAGS=$(MODEL_FLAG) -fPIC -std=c11 -DHAVE_UNISTD_H +# Bundled with the system library on OSX, and doesn't work with >= MacOS 11 + ifneq (osx,$(OS)) + NODEFAULTLIB += -L-lpthread -L-lm + endif + ifeq ($(BUILD),debug) + CFLAGS += -g + else + CFLAGS += -O3 + endif +else + ifeq ($(MODEL),32omf) + CFLAGS=-DNO_snprintf + ifeq ($(BUILD),debug) + CFLAGS += -g + else + CFLAGS += -O + endif + else # win64/win32coff + OUTFILEFLAG = /Fo + CFLAGS += /nologo /Zl /GS- + ifeq ($(BUILD),debug) + CFLAGS += /Z7 + else + CFLAGS += /O2 + endif + endif +endif +ifeq (osx,$(OS)) + ifeq (64,$(MODEL)) + CFLAGS+=--target=x86_64-darwin-apple # ARM cpu is not supported by dmd + endif +endif + + +# Set DFLAGS +DFLAGS= +override DFLAGS+=-conf= -I$(DRUNTIME_PATH)/import $(DMDEXTRAFLAGS) -w -de -preview=dip1000 -preview=dtorfields -preview=fieldwise $(MODEL_FLAG) $(PIC) +ifeq ($(BUILD),debug) +override DFLAGS += -g -debug +else +override DFLAGS += -O -release +endif + +ifdef ENABLE_COVERAGE +override DFLAGS += -cov=ctfe +endif + +ifdef NO_BOUNDSCHECKS +override DFLAGS += -boundscheck=off +endif + +ifdef NO_AUTODECODE +override DFLAGS += -version=NoAutodecodeStrings +endif + +UDFLAGS=-unittest -version=StdUnittest + +LINKDL:=$(if $(findstring $(OS),linux),-L-ldl,) + +# use timelimit to avoid deadlocks if available +TIMELIMIT:=$(if $(shell which timelimit 2>/dev/null || true),timelimit -t 90 ,) + +# Set VERSION, where the file is that contains the version string +VERSION=$(DMD_DIR)/VERSION + +# Set LIB, the ultimate target +ifeq (,$(findstring win,$(OS))) + LIB:=$(ROOT)/libphobos2.a + # 2.064.2 => libphobos2.so.0.64.2 + # 2.065 => libphobos2.so.0.65.0 + # MAJOR version is 0 for now, which means the ABI is still unstable + MAJOR:=0 + MINOR:=$(shell awk -F. '{ print int($$2) }' $(VERSION)) + PATCH:=$(shell awk -F. '{ print int($$3) }' $(VERSION)) + # SONAME doesn't use patch level (ABI compatible) + SONAME:=libphobos2.so.$(MAJOR).$(MINOR) + LIBSO:=$(ROOT)/$(SONAME).$(PATCH) +else + ifeq ($(MODEL),32omf) + LIB:=phobos.lib + else ifeq ($(MODEL),32) + LIB:=phobos32mscoff.lib + else + LIB:=phobos$(MODEL).lib + endif +endif + +################################################################################ +MAIN = $(ROOT)/emptymain.d + +# Given one or more packages, returns the modules they contain +P2MODULES=$(foreach P,$1,$(addprefix $P/,$(PACKAGE_$(subst /,_,$P)))) + +# Packages in std. Just mention the package name here. The contents of package +# xy/zz is in variable PACKAGE_xy_zz. This allows automation in iterating +# packages and their modules. +STD_PACKAGES = std $(addprefix std/,\ + algorithm container datetime digest experimental/allocator \ + experimental/allocator/building_blocks experimental/logger \ + format logger math net uni \ + experimental range regex windows) + +# Modules broken down per package + +PACKAGE_std = array ascii base64 bigint bitmanip checkedint compiler complex concurrency \ + conv csv demangle encoding exception file \ + functional getopt int128 json mathspecial meta mmfile numeric \ + outbuffer package parallelism path process random signals socket stdint \ + stdio string sumtype system traits typecons \ + uri utf uuid variant zip zlib +PACKAGE_std_experimental = checkedint +PACKAGE_std_algorithm = comparison iteration mutation package searching setops \ + sorting +PACKAGE_std_container = array binaryheap dlist package rbtree slist util +PACKAGE_std_datetime = date interval package stopwatch systime timezone +PACKAGE_std_digest = crc hmac md murmurhash package ripemd sha +PACKAGE_std_experimental_logger = core filelogger \ + nulllogger multilogger package +PACKAGE_std_experimental_allocator = \ + common gc_allocator mallocator mmap_allocator package showcase typed +PACKAGE_std_experimental_allocator_building_blocks = \ + affix_allocator aligned_block_list allocator_list ascending_page_allocator \ + bucketizer fallback_allocator free_list free_tree bitmapped_block \ + kernighan_ritchie null_allocator package quantizer \ + region scoped_allocator segregator stats_collector +PACKAGE_std_format = package read spec write $(addprefix internal/, floats read write) +PACKAGE_std_math = algebraic constants exponential hardware operations \ + package remainder rounding traits trigonometry +PACKAGE_std_net = curl isemail +PACKAGE_std_range = interfaces package primitives +PACKAGE_std_regex = package $(addprefix internal/,generator ir parser \ + backtracking tests tests2 thompson kickstart) +PACKAGE_std_uni = package +PACKAGE_std_windows = charset registry syserror +PACKAGE_std_logger = core filelogger \ + nulllogger multilogger package + +# Modules in std (including those in packages) +STD_MODULES=$(call P2MODULES,$(STD_PACKAGES)) + +# NoAutodecode test modules. +# List all modules whose unittests are known to work without autodecode enabled. +NO_AUTODECODE_MODULES= std/utf + +# Other D modules that aren't under std/ +EXTRA_MODULES_COMMON := $(addprefix etc/c/,curl odbc/sql odbc/sqlext \ + odbc/sqltypes odbc/sqlucode sqlite3 zlib) + +EXTRA_DOCUMENTABLES := $(EXTRA_MODULES_COMMON) + +EXTRA_MODULES_INTERNAL := $(addprefix std/, \ + algorithm/internal \ + $(addprefix internal/, \ + cstring memory digest/sha_SSSE3 \ + $(addprefix math/, biguintcore biguintnoasm biguintx86 \ + errorfunction gammafunction ) \ + scopebuffer test/dummyrange test/range \ + $(addprefix unicode_, comp decomp grapheme norm tables) \ + windows/advapi32 \ + ) \ + typetuple \ +) + +EXTRA_MODULES += $(EXTRA_DOCUMENTABLES) $(EXTRA_MODULES_INTERNAL) + +# Aggregate all D modules relevant to this build +D_MODULES = $(STD_MODULES) $(EXTRA_MODULES) + +# Add the .d suffix to the module names +D_FILES = $(addsuffix .d,$(D_MODULES)) +# Aggregate all D modules over all OSs (this is for the zip file) +ALL_D_FILES = $(addsuffix .d, $(STD_MODULES) $(EXTRA_MODULES_COMMON) \ + $(EXTRA_MODULES_LINUX) $(EXTRA_MODULES_OSX) $(EXTRA_MODULES_FREEBSD) \ + $(EXTRA_MODULES_WIN32) $(EXTRA_MODULES_INTERNAL)) + +# C files to be part of the build +C_MODULES = $(addprefix etc/c/zlib/, adler32 compress crc32 deflate \ + gzclose gzlib gzread gzwrite infback inffast inflate inftrees trees uncompr zutil) + +OBJS = $(addsuffix $(DOTOBJ),$(addprefix $(ROOT)/,$(C_MODULES))) + +MAKEFILE = $(firstword $(MAKEFILE_LIST)) + +# build with shared library support (defaults to true on supported platforms) +SHARED=$(if $(findstring $(OS),linux freebsd),1,) + +TESTS_EXTRACTOR=$(ROOT)/tests_extractor$(DOTEXE) +PUBLICTESTS_DIR=$(ROOT)/publictests +BETTERCTESTS_DIR=$(ROOT)/betterctests + +################################################################################ +# Rules begin here +################################################################################ + +# Main target (builds the dll on linux, too) +ifeq (1,$(SHARED)) +all : lib dll +else +all : lib +endif + +ifneq (,$(findstring Darwin_64_32, $(PWD))) +install: + echo "Darwin_64_32_disabled" +else +install : + $(MAKE) -f $(MAKEFILE) OS=$(OS) MODEL=$(MODEL) BUILD=release INSTALL_DIR=$(INSTALL_DIR) \ + DMD=$(DMD) install2 +endif + +.PHONY : unittest +ifeq (1,$(BUILD_WAS_SPECIFIED)) +unittest : $(addsuffix .run,$(addprefix unittest/,$(D_MODULES))) +else +unittest : unittest-debug unittest-release +unittest-%: + $(MAKE) -f $(MAKEFILE) unittest OS=$(OS) MODEL=$(MODEL) DMD=$(DMD) BUILD=$* +endif + +################################################################################ +# Patterns begin here +################################################################################ + +.PHONY: lib dll +lib: $(LIB) +dll: $(ROOT)/libphobos2.so + +$(ROOT)/%$(DOTOBJ): %.c + @[ -d $(dir $@) ] || mkdir -p $(dir $@) || [ -d $(dir $@) ] + $(CC) -c $(CFLAGS) $< $(OUTFILEFLAG)$@ + +$(LIB): $(OBJS) $(ALL_D_FILES) $(DRUNTIME) + $(DMD) $(DFLAGS) -lib -of$@ $(DRUNTIME) $(D_FILES) $(OBJS) + +$(ROOT)/libphobos2.so: $(ROOT)/$(SONAME) + ln -sf $(notdir $(LIBSO)) $@ + +$(ROOT)/$(SONAME): $(LIBSO) + ln -sf $(notdir $(LIBSO)) $@ + +$(LIBSO): override PIC:=-fPIC +$(LIBSO): $(OBJS) $(ALL_D_FILES) $(DRUNTIMESO) + $(DMD) $(DFLAGS) -shared $(NODEFAULTLIB) -of$@ -L-soname=$(SONAME) $(DRUNTIMESO) $(LINKDL) $(D_FILES) $(OBJS) + +ifeq (osx,$(OS)) +# Build fat library that combines the 32 bit and the 64 bit libraries +libphobos2.a: $(ROOT_OF_THEM_ALL)/osx/release/libphobos2.a +$(ROOT_OF_THEM_ALL)/osx/release/libphobos2.a: + $(MAKE) -f $(MAKEFILE) OS=$(OS) MODEL=32 BUILD=release + $(MAKE) -f $(MAKEFILE) OS=$(OS) MODEL=64 BUILD=release + lipo $(ROOT_OF_THEM_ALL)/osx/release/32/libphobos2.a \ + $(ROOT_OF_THEM_ALL)/osx/release/64/libphobos2.a \ + -create -output $@ +endif + +################################################################################ +# Unittests +################################################################################ + +DISABLED_TESTS = +ifeq ($(OS),freebsd) + ifeq ($(MODEL),32) + # Curl tests for FreeBSD 32-bit are temporarily disabled. + # https://github.com/braddr/d-tester/issues/70 + # https://issues.dlang.org/show_bug.cgi?id=18519 + DISABLED_TESTS += std/net/curl + endif +endif + +$(addsuffix .run,$(addprefix unittest/,$(DISABLED_TESTS))) : + @echo Testing $@ - disabled + +UT_D_OBJS:=$(addprefix $(ROOT)/unittest/,$(addsuffix $(DOTOBJ),$(D_MODULES))) +# need to recompile all unittest objects whenever sth. changes +$(UT_D_OBJS): $(ALL_D_FILES) +$(UT_D_OBJS): $(ROOT)/unittest/%$(DOTOBJ): %.d + @mkdir -p $(dir $@) + $(DMD) $(DFLAGS) $(UDFLAGS) -c -of$@ $< + +ifneq (1,$(SHARED)) + +$(UT_D_OBJS): $(DRUNTIME) + +$(ROOT)/unittest/test_runner$(DOTEXE): $(DRUNTIME_PATH)/src/test_runner.d $(UT_D_OBJS) $(OBJS) $(DRUNTIME) + $(DMD) $(DFLAGS) $(UDFLAGS) -of$@ $(DRUNTIME_PATH)/src/test_runner.d $(UT_D_OBJS) $(OBJS) $(DRUNTIME) $(LINKDL) $(NODEFAULTLIB) + +else + +UT_LIBSO:=$(ROOT)/unittest/libphobos2-ut.so + +$(UT_D_OBJS): $(DRUNTIMESO) + +$(UT_LIBSO): override PIC:=-fPIC +$(UT_LIBSO): $(UT_D_OBJS) $(OBJS) $(DRUNTIMESO) + $(DMD) $(DFLAGS) -shared $(UDFLAGS) -of$@ $(UT_D_OBJS) $(OBJS) $(DRUNTIMESO) $(LINKDL) $(NODEFAULTLIB) + +$(ROOT)/unittest/test_runner$(DOTEXE): $(DRUNTIME_PATH)/src/test_runner.d $(UT_LIBSO) + $(DMD) $(DFLAGS) -of$@ $< -L$(UT_LIBSO) $(NODEFAULTLIB) + +endif + +# macro that returns the module name given the src path +moduleName=$(subst /,.,$(1)) + +# target for batch unittests (using shared phobos library and test_runner) +unittest/%.run : $(ROOT)/unittest/test_runner$(DOTEXE) + $(QUIET)$(TIMELIMIT)$(RUN) $< $(call moduleName,$*) + +# Target for quickly running a single unittest (using static phobos library). +# For example: "make std/algorithm/mutation.test" +# The mktemp business is needed so .o files don't clash in concurrent unittesting. +%.test : %.d $(LIB) + T=`mktemp -d /tmp/.dmd-run-test.XXXXXX` && \ + ( \ + $(DMD) -od$$T $(DFLAGS) -main $(UDFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL) -cov=ctfe -run $< ; \ + RET=$$? ; rm -rf $$T ; exit $$RET \ + ) + +# Target for quickly unittesting all modules and packages within a package, +# transitively. For example: "make std/algorithm.test" +%.test : $(LIB) + $(MAKE) -f $(MAKEFILE) $(addsuffix .test,$(patsubst %.d,%,$(wildcard $*/*))) + +# Recursive target for %.debug +# It has to be recursive as %.debug depends on $(LIB) and we don't want to +# force the user to call make with BUILD=debug. +# Therefore we call %.debug_with_debugger and pass BUILD=debug from %.debug +# This forces all of phobos to have debug symbols, which we need as we don't +# know where debugging is leading us. +%.debug_with_debugger : %.d $(LIB) + $(DMD) $(DFLAGS) -main $(UDFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL) $< + $(DEBUGGER) ./$(basename $(notdir $<)) + +# Target for quickly debugging a single module +# For example: make DEBUGGER=ddd std/format.debug +# ddd in this case is a graphical frontend to gdb +%.debug : %.d + BUILD=debug $(MAKE) -f $(MAKEFILE) $(basename $<).debug_with_debugger + +################################################################################ +# More stuff +################################################################################ + +# Disable implicit rule +%$(DOTEXE) : %$(DOTOBJ) + +%/.directory : + mkdir -p $* || exists $* + touch $@ + +clean : + rm -rf $(ROOT_OF_THEM_ALL) $(ZIPFILE) $(LIB) + +gitzip: + git archive --format=zip HEAD > $(ZIPFILE) + +zip : + -rm -f $(ZIPFILE) + zip -r $(ZIPFILE) . -x .git\* -x generated\* + +install2 : all + $(eval lib_dir=$(if $(filter $(OS),osx), lib, lib$(MODEL))) + mkdir -p $(INSTALL_DIR)/$(OS)/$(lib_dir) + cp $(LIB) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ +ifeq (1,$(SHARED)) + cp -P $(LIBSO) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ + cp -P $(ROOT)/$(SONAME) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ + cp -P $(ROOT)/libphobos2.so $(INSTALL_DIR)/$(OS)/$(lib_dir)/ +endif + mkdir -p $(INSTALL_DIR)/src/phobos/etc + mkdir -p $(INSTALL_DIR)/src/phobos/std + cp -r std/* $(INSTALL_DIR)/src/phobos/std/ + cp -r etc/* $(INSTALL_DIR)/src/phobos/etc/ + cp LICENSE_1_0.txt $(INSTALL_DIR)/phobos-LICENSE.txt + +ifeq (1,$(CUSTOM_DRUNTIME)) +# We consider a custom-set DRUNTIME a sign they build druntime themselves +else +# This rule additionally produces $(DRUNTIMESO). Add a fake dependency +# to always invoke druntime's make. Use FORCE instead of .PHONY to +# avoid rebuilding phobos when $(DRUNTIME) didn't change. +$(DRUNTIME): FORCE + $(MAKE) -C $(DRUNTIME_PATH) MODEL=$(MODEL) DMD=$(abspath $(DMD)) OS=$(OS) BUILD=$(BUILD) + +ifeq (,$(findstring win,$(OS))) +$(DRUNTIMESO): $(DRUNTIME) +endif + +FORCE: + +endif + +JSON = phobos.json +json : $(JSON) +$(JSON) : $(ALL_D_FILES) + $(DMD) $(DFLAGS) -o- -Xf$@ $^ + +########################################################### +# HTML documentation +# the following variables will be set by dlang.org: +# DOC_OUTPUT_DIR, STDDOC +########################################################### +SRC_DOCUMENTABLES = index.dd $(addsuffix .d,$(STD_MODULES) $(EXTRA_DOCUMENTABLES)) +# Set DDOC, the documentation generator +DDOC=$(DMD) -conf= $(MODEL_FLAG) -w -c -o- -version=StdDdoc \ + -I$(DRUNTIME_PATH)/import $(DMDEXTRAFLAGS) + +# D file to html, e.g. std/conv.d -> std_conv.html +# But "package.d" is special cased: std/range/package.d -> std_range.html +D2HTML=$(foreach p,$1,$(if $(subst package.d,,$(notdir $p)),$(subst /,_,$(subst .d,.html,$(subst .dd,.html,$p))),$(subst /,_,$(subst /package.d,.html,$p)))) + +HTMLS=$(addprefix $(DOC_OUTPUT_DIR)/, \ + $(call D2HTML, $(SRC_DOCUMENTABLES))) + +$(DOC_OUTPUT_DIR)/. : + mkdir -p $@ + +# For each module, define a rule e.g.: +# ../web/phobos/std_conv.html : std/conv.d $(STDDOC) ; ... +$(foreach p,$(SRC_DOCUMENTABLES),$(eval \ +$(DOC_OUTPUT_DIR)/$(call D2HTML,$p) : $p $(STDDOC) ;\ + $(DDOC) project.ddoc $(STDDOC) -Df$$@ $$<)) + +# this target is called by dlang.org +html : $(DOC_OUTPUT_DIR)/. $(HTMLS) + +build-html: + ${MAKE} -C $(DLANG_ORG_DIR) -f posix.mak phobos-prerelease + +################################################################################ +# Automatically create dlang/tools repository if non-existent +################################################################################ + +${TOOLS_DIR}: + git clone --depth=1 ${GIT_HOME}/$(@F) $@ + +$(TOOLS_DIR)/checkwhitespace.d: | $(TOOLS_DIR) +$(TOOLS_DIR)/tests_extractor.d: | $(TOOLS_DIR) + +#################### test for undesired white spaces ########################## +CWS_TOCHECK = Makefile +CWS_TOCHECK += $(ALL_D_FILES) index.dd + +checkwhitespace: $(LIB) $(TOOLS_DIR)/checkwhitespace.d + $(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -run $(TOOLS_DIR)/checkwhitespace.d $(CWS_TOCHECK) + +############################# +# Submission to Phobos are required to conform to the DStyle +# The tests below automate some, but not all parts of the DStyle guidelines. +# See also: http://dlang.org/dstyle.html +############################# + +$(DSCANNER_DIR): + git clone https://github.com/dlang-community/Dscanner $@ + git -C $@ checkout $(DSCANNER_HASH) + git -C $@ submodule update --init --recursive + +$(DSCANNER_DIR)/dsc: | $(DSCANNER_DIR) $(DMD) $(LIB) + # debug build is faster, but disable 'missing import' messages (missing core from druntime) + sed 's/dparse_verbose/StdLoggerDisableWarning/' $(DSCANNER_DIR)/makefile > $(DSCANNER_DIR)/dscanner_makefile_tmp + mv $(DSCANNER_DIR)/dscanner_makefile_tmp $(DSCANNER_DIR)/makefile + DC=$(abspath $(DMD)) DFLAGS="$(DFLAGS) -defaultlib=$(LIB)" $(MAKE) -C $(DSCANNER_DIR) githash debug + +style: style_lint publictests + +# runs static code analysis with Dscanner +dscanner: $(LIB) + @# The dscanner target is without dependencies to avoid constant rebuilds of Phobos (`make` always rebuilds order-only dependencies) + @# However, we still need to ensure that the DScanner binary is built once + @[ -f $(DSCANNER_DIR)/dsc ] || ${MAKE} $(DSCANNER_DIR)/dsc + @echo "Running DScanner" + $(DSCANNER_DIR)/dsc --config .dscanner.ini -I $(DRUNTIME_PATH)/src/ --styleCheck etc std -I. + +style_lint_shellcmds: + @echo "Check for trailing whitespace" + grep -nr '[[:blank:]]$$' $$(find etc std -name '*.d'); test $$? -eq 1 + + @echo "Enforce whitespace before opening parenthesis" + grep -nrE "\<(for|foreach|foreach_reverse|if|while|switch|catch|version)\(" $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce no whitespace after opening parenthesis" + grep -nrE "\<(version) \( " $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce whitespace between colon(:) for import statements (doesn't catch everything)" + grep -nr 'import [^/,=]*:.*;' $$(find etc std -name '*.d') | grep -vE "import ([^ ]+) :\s"; test $$? -eq 1 + + @echo "Check for package wide std.algorithm imports" + grep -nr 'import std.algorithm : ' $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce Allman style" + grep -nrE '(if|for|foreach|foreach_reverse|while|unittest|switch|else|version) .*{$$' $$(find etc std -name '*.d'); test $$? -eq 1 + + @echo "Enforce do { to be in Allman style" + grep -nr 'do *{$$' $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce no space between assert and the opening brace, i.e. assert(" + grep -nrE 'assert +\(' $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce space after cast(...)" + grep -nrE '[^"]cast\([^)]*?\)[[:alnum:]]' $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce space between a .. b" + grep -nrE '[[:alnum:]][.][.][[:alnum:]]|[[:alnum:]] [.][.][[:alnum:]]|[[:alnum:]][.][.] [[:alnum:]]' $$(find etc std -name '*.d' | grep -vE 'std/string.d|std/uni/package.d') ; test $$? -eq 1 + + @echo "Enforce space between binary operators" + grep -nrE "[[:alnum:]](==|!=|<=|<<|>>|>>>|^^)[[:alnum:]]|[[:alnum:]] (==|!=|<=|<<|>>|>>>|^^)[[:alnum:]]|[[:alnum:]](==|!=|<=|<<|>>|>>>|^^) [[:alnum:]]" $$(find etc std -name '*.d'); test $$? -eq 1 + + @echo "Validate changelog files (Do _not_ use REF in the title!)" + @for file in $$(find changelog -name '*.dd') ; do \ + cat $$file | head -n1 | grep -nqE '\$$\((REF|LINK2|HTTP|MREF)' && \ + { echo "$$file: The title line can't contain links - it's already a link" && exit 1; } ;\ + cat $$file | head -n2 | tail -n1 | grep -q '^$$' || \ + { echo "$$file: After the title line an empty, separating line is expected" && exit 1; } ;\ + cat $$file | head -n3 | tail -n1 | grep -nqE '^.{1,}$$' || \ + { echo "$$file: The title is supposed to be followed by a long description" && exit 1; } ;\ + done + +style_lint: style_lint_shellcmds dscanner + @echo "Check that Ddoc runs without errors" + $(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -w -D -Df/dev/null -main -c -o- $$(find etc std -type f -name '*.d') 2>&1 + +################################################################################ +# Build the test extractor. +# - extracts and runs public unittest examples to checks for missing imports +# - extracts and runs @betterC unittests +################################################################################ + +$(TESTS_EXTRACTOR): $(TOOLS_DIR)/tests_extractor.d | $(LIB) + DFLAGS="$(DFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL)" $(DUB) build --force --compiler=$(abspath $(DMD)) --single $< + mv $(TOOLS_DIR)/tests_extractor$(DOTEXE) $@ + +test_extractor: $(TESTS_EXTRACTOR) + +################################################################################ +# Extract public tests of a module and test them in an separate file (i.e. without its module) +# This is done to check for potentially missing imports in the examples, e.g. +# make std/format.publictests +################################################################################ + +publictests: $(addsuffix .publictests,$(D_MODULES)) + +%.publictests: %.d $(LIB) $(TESTS_EXTRACTOR) | $(PUBLICTESTS_DIR)/.directory + @$(TESTS_EXTRACTOR) --inputdir $< --outputdir $(PUBLICTESTS_DIR) + @$(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -main -unittest -run $(PUBLICTESTS_DIR)/$(subst /,_,$<) + +################################################################################ +# Check and run @betterC tests +# ---------------------------- +# +# Extract @betterC tests of a module and run them in -betterC +# +# make std/format.betterc +################################################################################ + +betterc-phobos-tests: $(addsuffix .betterc,$(D_MODULES)) +betterc: betterc-phobos-tests + +%.betterc: %.d | $(BETTERCTESTS_DIR)/.directory + @# Due to the FORCE rule on druntime, make will always try to rebuild Phobos (even as an order-only dependency) + @# However, we still need to ensure that the test_extractor is built once + @[ -f "$(TESTS_EXTRACTOR)" ] || ${MAKE} "$(TESTS_EXTRACTOR)" + $(TESTS_EXTRACTOR) --betterC --attributes betterC \ + --inputdir $< --outputdir $(BETTERCTESTS_DIR) + $(DMD) $(DFLAGS) $(NODEFAULTLIB) -betterC -unittest -run $(BETTERCTESTS_DIR)/$(subst /,_,$<) + + +################################################################################ +# Full-module BetterC tests +# ------------------------- +# +# Test full modules with -betterC. Edit BETTERC_MODULES and +# test/betterc_module_tests.d to add new modules to the list. +# +# make betterc-module-tests +################################################################################ + +BETTERC_MODULES=std/sumtype + +betterc: betterc-module-tests + +betterc-module-tests: $(ROOT)/betterctests/betterc_module_tests + $(ROOT)/betterctests/betterc_module_tests + +$(ROOT)/betterctests/betterc_module_tests: test/betterc_module_tests.d $(addsuffix .d,$(BETTERC_MODULES)) + $(DMD) $(DFLAGS) $(NODEFAULTLIB) -of=$(ROOT)/betterctests/betterc_module_tests -betterC -unittest test/betterc_module_tests.d $(addsuffix .d,$(BETTERC_MODULES)) + +################################################################################ + +.PHONY : auto-tester-build +auto-tester-build: + echo "Auto-Tester has been disabled" + +.PHONY : auto-tester-test +auto-tester-test: + echo "Auto-Tester has been disabled" + +.PHONY: buildkite-test +buildkite-test: unittest betterc + +.PHONY: autodecode-test +autodecode-test: $(addsuffix .test,$(NO_AUTODECODE_MODULES)) + +.DELETE_ON_ERROR: # GNU Make directive (delete output files on error) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b85fdb494f7..1bb435d4931 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -15,11 +15,9 @@ jobs: strategy: matrix: x64: - OS: Win_64 MODEL: 64 ARCH: x64 x86-OMF: - OS: Win_32 MODEL: 32omf ARCH: x86 steps: @@ -52,12 +50,10 @@ jobs: strategy: matrix: x86-mscoff: - OS: Win_32 - MODEL: 32mscoff + MODEL: 32 ARCH: x86 x86-mscoff_MinGW: - OS: Win_32 - MODEL: 32mscoff + MODEL: 32 ARCH: x86 C_RUNTIME: mingw steps: diff --git a/changelog/makefiles.dd b/changelog/makefiles.dd new file mode 100644 index 00000000000..6fb38d7f4e1 --- /dev/null +++ b/changelog/makefiles.dd @@ -0,0 +1,5 @@ +Makefiles cleanup + +The `{posix,win32,win64}.mak` Makefiles have been merged to a generic `Makefile`. `posix.mak` is kept as a deprecated forwarder for now. + +On Windows, you can/need to use the generic Makefile too - with a GNU make (and a git installation providing bash and GNU tools). Windows devs can finally exploit parallelism via `-j`! You may download a prebuilt zipped .exe from https://github.com/dlang/dmd/releases/download/nightly/gnumake-4.4-win64.zip. diff --git a/etc/c/zlib/linux.mak b/etc/c/zlib/linux.mak deleted file mode 100644 index d6d5a77d0db..00000000000 --- a/etc/c/zlib/linux.mak +++ /dev/null @@ -1,95 +0,0 @@ -# Makefile for zlib - -CC=gcc -LD=link -CFLAGS=-I. -O -g -DHAVE_UNISTD_H -DHAVE_STDARG_H -LDFLAGS= -O=.o - -.c.o: - "$(CC)" -c $(CFLAGS) $* - -.d.o: - "$(DMD)" -c $(DFLAGS) $* - -# variables -OBJS = adler32$(O) compress$(O) crc32$(O) deflate$(O) gzclose$(O) gzlib$(O) gzread$(O) \ - gzwrite$(O) infback$(O) inffast$(O) inflate$(O) inftrees$(O) trees$(O) uncompr$(O) zutil$(O) - -all: zlib.a example infcover minigzip - -adler32.o: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -zutil.o: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -gzclose.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzlib.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzread.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzwrite.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -compress.o: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -uncompr.o: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -crc32.o: zutil.h zlib.h zconf.h crc32.h - "$(CC)" -c $(CFLAGS) $*.c - -deflate.o: deflate.h zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h - "$(CC)" -c $(CFLAGS) $*.c - -inftrees.o: zutil.h zlib.h zconf.h inftrees.h - "$(CC)" -c $(CFLAGS) $*.c - -trees.o: deflate.h zutil.h zlib.h zconf.h trees.h - "$(CC)" -c $(CFLAGS) $*.c - - -example.o: test/example.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -infcover.o: test/infcover.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -minigzip.o: test/minigzip.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -zlib.a: $(OBJS) - ar -r $@ $(OBJS) - -example: example.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ example.o zlib.a - -infcover: infcover.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ infcover.o zlib.a - -minigzip: minigzip.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ minigzip.o zlib.a - -test: example infcover minigzip - ./example - ./infcover - echo hello world | ./minigzip | ./minigzip -d - -clean: - $(RM) $(OBJS) zlib.a example.o example infcover.o infcover minigzip.o minigzip foo.gz - diff --git a/etc/c/zlib/osx.mak b/etc/c/zlib/osx.mak deleted file mode 100644 index cee494754a6..00000000000 --- a/etc/c/zlib/osx.mak +++ /dev/null @@ -1,99 +0,0 @@ -# Makefile for zlib - -CC=gcc -LD=link -CFLAGS=-I. -O -g -DHAVE_UNISTD_H -DHAVE_STDARG_H -ifeq (64,$(MODEL)) - CFLAGS+=--target=x86_64-darwin-apple # ARM cpu is not supported by dmd -endif - -LDFLAGS= -O=.o - -.c.o: - "$(CC)" -c $(CFLAGS) $* - -.d.o: - "$(DMD)" -c $(DFLAGS) $* - -# variables -OBJS = adler32$(O) compress$(O) crc32$(O) deflate$(O) gzclose$(O) gzlib$(O) gzread$(O) \ - gzwrite$(O) infback$(O) inffast$(O) inflate$(O) inftrees$(O) trees$(O) uncompr$(O) zutil$(O) - -all: zlib.a example infcover minigzip - -adler32.o: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -zutil.o: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -gzclose.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzlib.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzread.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzwrite.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -compress.o: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -uncompr.o: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -crc32.o: zutil.h zlib.h zconf.h crc32.h - "$(CC)" -c $(CFLAGS) $*.c - -deflate.o: deflate.h zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h - "$(CC)" -c $(CFLAGS) $*.c - -inftrees.o: zutil.h zlib.h zconf.h inftrees.h - "$(CC)" -c $(CFLAGS) $*.c - -trees.o: deflate.h zutil.h zlib.h zconf.h trees.h - "$(CC)" -c $(CFLAGS) $*.c - - -example.o: test/example.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -infcover.o: test/infcover.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -minigzip.o: test/minigzip.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -zlib.a: $(OBJS) - ar -r $@ $(OBJS) - -example: example.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ example.o zlib.a - -infcover: infcover.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ infcover.o zlib.a - -minigzip: minigzip.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ minigzip.o zlib.a - -test: example infcover minigzip - ./example - ./infcover - echo hello world | ./minigzip | ./minigzip -d - -clean: - $(RM) $(OBJS) zlib.a example.o example infcover.o infcover minigzip.o minigzip foo.gz - diff --git a/etc/c/zlib/win32.mak b/etc/c/zlib/win32.mak deleted file mode 100644 index 60dbe1c3dbf..00000000000 --- a/etc/c/zlib/win32.mak +++ /dev/null @@ -1,97 +0,0 @@ -# Makefile for zlib - -CC=dmc -LD=link -LIB=lib -CFLAGS=-I. -o -DNO_snprintf -LDFLAGS= -O=.obj - -# variables - -OBJS = adler32$(O) compress$(O) crc32$(O) deflate$(O) gzclose$(O) gzlib$(O) gzread$(O) \ - gzwrite$(O) infback$(O) inffast$(O) inflate$(O) inftrees$(O) trees$(O) uncompr$(O) zutil$(O) - - -all: zlib.lib example.exe infcover.exe minigzip.exe - -adler32.obj: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -zutil.obj: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -gzclose.obj: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzlib.obj: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzread.obj: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzwrite.obj: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -compress.obj: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -uncompr.obj: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -crc32.obj: zutil.h zlib.h zconf.h crc32.h - "$(CC)" -c $(CFLAGS) $*.c - -deflate.obj: deflate.h zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -infback.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inflate.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inffast.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h - "$(CC)" -c $(CFLAGS) $*.c - -inftrees.obj: zutil.h zlib.h zconf.h inftrees.h - "$(CC)" -c $(CFLAGS) $*.c - -trees.obj: deflate.h zutil.h zlib.h zconf.h trees.h - "$(CC)" -c $(CFLAGS) $*.c - - - -example.obj: test\example.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test\$*.c - -infcover.obj: test\infcover.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test\$*.c - -minigzip.obj: test\minigzip.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test\$*.c - -zlib.lib: $(OBJS) - "$(LIB)" -c zlib.lib $(OBJS) - -example.exe: example.obj zlib.lib - "$(LD)" $(LDFLAGS) example.obj zlib.lib - -infcover.exe: infcover.obj zlib.lib - "$(LD)" $(LDFLAGS) infcover.obj zlib.lib - -minigzip.exe: minigzip.obj zlib.lib - "$(LD)" $(LDFLAGS) minigzip.obj zlib.lib - -test: example.exe infcover.exe minigzip.exe - example - infcover - echo hello world | minigzip | minigzip -d - -clean: - del *.obj - del *.exe - del *.dll - del *.lib - del *.lst - del foo.gz diff --git a/etc/c/zlib/win64.mak b/etc/c/zlib/win64.mak deleted file mode 100644 index 4c19d3d0553..00000000000 --- a/etc/c/zlib/win64.mak +++ /dev/null @@ -1,104 +0,0 @@ -# Makefile for zlib64 - -MODEL=64 - -CC=cl -LD=link -AR=lib - -CFLAGS=/O2 /nologo -LIBFLAGS=/nologo -LDFLAGS=/nologo -O=.obj - -# do not preselect a C runtime (extracted from the line above to make the auto tester happy) -CFLAGS=$(CFLAGS) /Zl /GS- - -# variables - -OBJS = adler32$(O) compress$(O) crc32$(O) deflate$(O) gzclose$(O) gzlib$(O) gzread$(O) \ - gzwrite$(O) infback$(O) inffast$(O) inflate$(O) inftrees$(O) trees$(O) uncompr$(O) zutil$(O) - - -all: zlib$(MODEL).lib example.exe infcover.exe minigzip.exe - -adler32.obj: zutil.h zlib.h zconf.h - "$(CC)" /c $(CFLAGS) $*.c - -zutil.obj: zutil.h zlib.h zconf.h - "$(CC)" /c $(CFLAGS) $*.c - -gzclose.obj: zlib.h zconf.h gzguts.h - "$(CC)" /c $(CFLAGS) $*.c - -gzlib.obj: zlib.h zconf.h gzguts.h - "$(CC)" /c $(CFLAGS) $*.c - -gzread.obj: zlib.h zconf.h gzguts.h - "$(CC)" /c $(CFLAGS) $*.c - -gzwrite.obj: zlib.h zconf.h gzguts.h - "$(CC)" /c $(CFLAGS) $*.c - -compress.obj: zlib.h zconf.h - "$(CC)" /c $(CFLAGS) $*.c - -uncompr.obj: zlib.h zconf.h - "$(CC)" /c $(CFLAGS) $*.c - -crc32.obj: zutil.h zlib.h zconf.h crc32.h - "$(CC)" /c $(CFLAGS) $*.c - -deflate.obj: deflate.h zutil.h zlib.h zconf.h - "$(CC)" /c $(CFLAGS) $*.c - -infback.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" /c $(CFLAGS) $*.c - -inflate.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" /c $(CFLAGS) $*.c - -inffast.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h - "$(CC)" /c $(CFLAGS) $*.c - -inftrees.obj: zutil.h zlib.h zconf.h inftrees.h - "$(CC)" /c $(CFLAGS) $*.c - -trees.obj: deflate.h zutil.h zlib.h zconf.h trees.h - "$(CC)" /c $(CFLAGS) $*.c - - - -example.obj: test\example.c zlib.h zconf.h - "$(CC)" /c $(cvarsdll) $(CFLAGS) test\$*.c - -infcover.obj: test\infcover.c zlib.h zconf.h - "$(CC)" /c $(cvarsdll) $(CFLAGS) test\$*.c - -minigzip.obj: test\minigzip.c zlib.h zconf.h - "$(CC)" /c $(cvarsdll) $(CFLAGS) test\$*.c - -zlib$(MODEL).lib: $(OBJS) - "$(AR)" $(LIBFLAGS) /OUT:zlib$(MODEL).lib $(OBJS) - -example.exe: example.obj zlib$(MODEL).lib - "$(LD)" $(LDFLAGS) example.obj zlib$(MODEL).lib - -infcover.exe: infcover.obj zlib$(MODEL).lib - "$(LD)" $(LDFLAGS) infcover.obj zlib$(MODEL).lib - -minigzip.exe: minigzip.obj zlib$(MODEL).lib - "$(LD)" $(LDFLAGS) minigzip.obj zlib$(MODEL).lib - -test: example.exe infcover.exe minigzip.exe - example - infcover - echo hello world | minigzip | minigzip -d - -clean: - del *.obj - del *.exe - del *.dll - del *.lib - del *.lst - del foo.gz diff --git a/posix.mak b/posix.mak index f246c0c9e60..bc94e485f0e 100644 --- a/posix.mak +++ b/posix.mak @@ -1,718 +1,11 @@ -# Makefile to build linux D runtime library libphobos2.a and its unit test -# -# make => makes release build of the library -# -# make clean => removes all targets built by the makefile -# -# make zip => creates a zip file of all the sources (not targets) -# referred to by the makefile, including the makefile -# -# make BUILD=debug => makes debug build of the library -# -# make unittest => builds all unittests (for debug AND release) and runs them -# -# make BUILD=debug unittest => builds all unittests (for debug) and runs them -# -# make DEBUGGER=ddd std/XXXXX.debug => builds the module XXXXX and executes it -# in the debugger ddd -# -# make build-html => makes html documentation -# -# make install => copies library to /usr/lib -# -# make std/somemodule.test => only builds and unittests std.somemodule -# -################################################################################ -# Configurable stuff, usually from the command line -# -# OS can be linux, win32, win32wine, osx, freebsd, netbsd or dragonflybsd. -# The system will be determined by using uname +$(warning ===== DEPRECATION NOTICE ===== ) +$(warning ===== DEPRECATION: posix.mak is deprecated. Please use generic Makefile instead.) +$(warning ============================== ) -QUIET:=@ +# forward everything to Makefile -DEBUGGER=gdb -GIT_HOME=https://github.com/dlang -DMD_DIR=../dmd +all: + $(MAKE) -f Makefile $@ -include $(DMD_DIR)/compiler/src/osmodel.mak - -ifeq (osx,$(OS)) - export MACOSX_DEPLOYMENT_TARGET=10.9 -endif - -# Default to a release build, override with BUILD=debug -ifeq (,$(BUILD)) -BUILD_WAS_SPECIFIED=0 -BUILD=release -else -BUILD_WAS_SPECIFIED=1 -endif - -ifneq ($(BUILD),release) - ifneq ($(BUILD),debug) - $(error Unrecognized BUILD=$(BUILD), must be 'debug' or 'release') - endif -endif - -# default to PIC, use PIC=1/0 to en-/disable PIC. -# Note that shared libraries and C files are always compiled with PIC. -ifeq ($(PIC),) - PIC:=1 -endif -ifeq ($(PIC),1) - override PIC:=-fPIC -else - override PIC:= -endif - -# Configurable stuff that's rarely edited -INSTALL_DIR = ../install -DRUNTIME_PATH = ../dmd/druntime -DLANG_ORG_DIR = ../dlang.org -ZIPFILE = phobos.zip -ROOT_OF_THEM_ALL = generated -ROOT = $(ROOT_OF_THEM_ALL)/$(OS)/$(BUILD)/$(MODEL) -DUB=dub -TOOLS_DIR=../tools -DSCANNER_HASH=5a53c538d0aa832f03840840271b6631fbbfc53d -DSCANNER_DIR=$(ROOT_OF_THEM_ALL)/dscanner-$(DSCANNER_HASH) - -# Set DRUNTIME name and full path -ifneq (,$(DRUNTIME)) - CUSTOM_DRUNTIME=1 -endif -ifeq (,$(findstring win,$(OS))) - DRUNTIME = $(DRUNTIME_PATH)/../generated/$(OS)/$(BUILD)/$(MODEL)/libdruntime.a - DRUNTIMESO = $(basename $(DRUNTIME)).so.a -else - DRUNTIME = $(DRUNTIME_PATH)/../lib/druntime.lib -endif - -# Set CC and DMD -ifeq ($(OS),win32wine) - CC = wine dmc.exe - DMD = wine dmd.exe - RUN = wine -else - DMD = $(DMD_DIR)/generated/$(OS)/$(BUILD)/$(MODEL)/dmd - ifeq ($(OS),win32) - CC = dmc - else - CC = cc - endif - RUN = -endif - -# Set CFLAGS -OUTFILEFLAG = -o -NODEFAULTLIB=-defaultlib= -debuglib= -ifeq (,$(findstring win,$(OS))) - CFLAGS=$(MODEL_FLAG) -fPIC -std=c11 -DHAVE_UNISTD_H -# Bundled with the system library on OSX, and doesn't work with >= MacOS 11 - ifneq (osx,$(OS)) - NODEFAULTLIB += -L-lpthread -L-lm - endif - ifeq ($(BUILD),debug) - CFLAGS += -g - else - CFLAGS += -O3 - endif -else - ifeq ($(OS),win32) - CFLAGS=-DNO_snprintf - ifeq ($(BUILD),debug) - CFLAGS += -g - else - CFLAGS += -O - endif - else # win64/win32coff - OUTFILEFLAG = /Fo - NODEFAULTLIB=-L/NOD:phobos$(MODEL).lib -L/OPT:NOICF - ifeq ($(BUILD),debug) - CFLAGS += /Z7 - else - CFLAGS += /Ox - endif - endif -endif -ifeq (osx,$(OS)) - ifeq (64,$(MODEL)) - CFLAGS+=--target=x86_64-darwin-apple # ARM cpu is not supported by dmd - endif -endif - - -# Set DFLAGS -DFLAGS= -override DFLAGS+=-conf= -I$(DRUNTIME_PATH)/import $(DMDEXTRAFLAGS) -w -de -preview=dip1000 -preview=dtorfields -preview=fieldwise $(MODEL_FLAG) $(PIC) -ifeq ($(BUILD),debug) -override DFLAGS += -g -debug -else -override DFLAGS += -O -release -endif - -ifdef ENABLE_COVERAGE -override DFLAGS += -cov=ctfe -endif - -ifdef NO_BOUNDSCHECKS -override DFLAGS += -boundscheck=off -endif - -ifdef NO_AUTODECODE -override DFLAGS += -version=NoAutodecodeStrings -endif - -UDFLAGS=-unittest -version=StdUnittest - -# Set DOTOBJ and DOTEXE -ifeq (,$(findstring win,$(OS))) - DOTOBJ:=.o - DOTEXE:= - PATHSEP:=/ -else - DOTOBJ:=.obj - DOTEXE:=.exe - PATHSEP:=$(shell echo "\\") -endif - -LINKDL:=$(if $(findstring $(OS),linux),-L-ldl,) - -# use timelimit to avoid deadlocks if available -TIMELIMIT:=$(if $(shell which timelimit 2>/dev/null || true),timelimit -t 90 ,) - -# Set VERSION, where the file is that contains the version string -VERSION=$(DMD_DIR)/VERSION - -# Set LIB, the ultimate target -ifeq (,$(findstring win,$(OS))) - LIB:=$(ROOT)/libphobos2.a - # 2.064.2 => libphobos2.so.0.64.2 - # 2.065 => libphobos2.so.0.65.0 - # MAJOR version is 0 for now, which means the ABI is still unstable - MAJOR:=0 - MINOR:=$(shell awk -F. '{ print int($$2) }' $(VERSION)) - PATCH:=$(shell awk -F. '{ print int($$3) }' $(VERSION)) - # SONAME doesn't use patch level (ABI compatible) - SONAME:=libphobos2.so.$(MAJOR).$(MINOR) - LIBSO:=$(ROOT)/$(SONAME).$(PATCH) -else - LIB:=$(ROOT)/phobos.lib -endif - -################################################################################ -MAIN = $(ROOT)/emptymain.d - -# Given one or more packages, returns the modules they contain -P2MODULES=$(foreach P,$1,$(addprefix $P/,$(PACKAGE_$(subst /,_,$P)))) - -# Packages in std. Just mention the package name here. The contents of package -# xy/zz is in variable PACKAGE_xy_zz. This allows automation in iterating -# packages and their modules. -STD_PACKAGES = std $(addprefix std/,\ - algorithm container datetime digest experimental/allocator \ - experimental/allocator/building_blocks experimental/logger \ - format logger math net uni \ - experimental range regex windows) - -# Modules broken down per package - -PACKAGE_std = array ascii base64 bigint bitmanip checkedint compiler complex concurrency \ - conv csv demangle encoding exception file \ - functional getopt int128 json mathspecial meta mmfile numeric \ - outbuffer package parallelism path process random signals socket stdint \ - stdio string sumtype system traits typecons \ - uri utf uuid variant zip zlib -PACKAGE_std_experimental = checkedint -PACKAGE_std_algorithm = comparison iteration mutation package searching setops \ - sorting -PACKAGE_std_container = array binaryheap dlist package rbtree slist util -PACKAGE_std_datetime = date interval package stopwatch systime timezone -PACKAGE_std_digest = crc hmac md murmurhash package ripemd sha -PACKAGE_std_experimental_logger = core filelogger \ - nulllogger multilogger package -PACKAGE_std_experimental_allocator = \ - common gc_allocator mallocator mmap_allocator package showcase typed -PACKAGE_std_experimental_allocator_building_blocks = \ - affix_allocator aligned_block_list allocator_list ascending_page_allocator \ - bucketizer fallback_allocator free_list free_tree bitmapped_block \ - kernighan_ritchie null_allocator package quantizer \ - region scoped_allocator segregator stats_collector -PACKAGE_std_format = package read spec write $(addprefix internal/, floats read write) -PACKAGE_std_math = algebraic constants exponential hardware operations \ - package remainder rounding traits trigonometry -PACKAGE_std_net = curl isemail -PACKAGE_std_range = interfaces package primitives -PACKAGE_std_regex = package $(addprefix internal/,generator ir parser \ - backtracking tests tests2 thompson kickstart) -PACKAGE_std_uni = package -PACKAGE_std_windows = charset registry syserror -PACKAGE_std_logger = core filelogger \ - nulllogger multilogger package - -# Modules in std (including those in packages) -STD_MODULES=$(call P2MODULES,$(STD_PACKAGES)) - -# NoAutodecode test modules. -# List all modules whose unittests are known to work without autodecode enabled. -NO_AUTODECODE_MODULES= std/utf - -# Other D modules that aren't under std/ -EXTRA_MODULES_COMMON := $(addprefix etc/c/,curl odbc/sql odbc/sqlext \ - odbc/sqltypes odbc/sqlucode sqlite3 zlib) - -EXTRA_DOCUMENTABLES := $(EXTRA_MODULES_COMMON) - -EXTRA_MODULES_INTERNAL := $(addprefix std/, \ - algorithm/internal \ - $(addprefix internal/, \ - cstring memory digest/sha_SSSE3 \ - $(addprefix math/, biguintcore biguintnoasm biguintx86 \ - errorfunction gammafunction ) \ - scopebuffer test/dummyrange test/range \ - $(addprefix unicode_, comp decomp grapheme norm tables) \ - windows/advapi32 \ - ) \ - typetuple \ -) - -EXTRA_MODULES += $(EXTRA_DOCUMENTABLES) $(EXTRA_MODULES_INTERNAL) - -# Aggregate all D modules relevant to this build -D_MODULES = $(STD_MODULES) $(EXTRA_MODULES) - -# Add the .d suffix to the module names -D_FILES = $(addsuffix .d,$(D_MODULES)) -# Aggregate all D modules over all OSs (this is for the zip file) -ALL_D_FILES = $(addsuffix .d, $(STD_MODULES) $(EXTRA_MODULES_COMMON) \ - $(EXTRA_MODULES_LINUX) $(EXTRA_MODULES_OSX) $(EXTRA_MODULES_FREEBSD) \ - $(EXTRA_MODULES_WIN32) $(EXTRA_MODULES_INTERNAL)) - -# C files to be part of the build -C_MODULES = $(addprefix etc/c/zlib/, adler32 compress crc32 deflate \ - gzclose gzlib gzread gzwrite infback inffast inflate inftrees trees uncompr zutil) - -OBJS = $(addsuffix $(DOTOBJ),$(addprefix $(ROOT)/,$(C_MODULES))) - -MAKEFILE = $(firstword $(MAKEFILE_LIST)) - -# build with shared library support (defaults to true on supported platforms) -SHARED=$(if $(findstring $(OS),linux freebsd),1,) - -TESTS_EXTRACTOR=$(ROOT)/tests_extractor -PUBLICTESTS_DIR=$(ROOT)/publictests -BETTERCTESTS_DIR=$(ROOT)/betterctests - -################################################################################ -# Rules begin here -################################################################################ - -# Main target (builds the dll on linux, too) -ifeq (1,$(SHARED)) -all : lib dll -else -all : lib -endif - -ifneq (,$(findstring Darwin_64_32, $(PWD))) -install: - echo "Darwin_64_32_disabled" -else -install : - $(MAKE) -f $(MAKEFILE) OS=$(OS) MODEL=$(MODEL) BUILD=release INSTALL_DIR=$(INSTALL_DIR) \ - DMD=$(DMD) install2 -endif - -.PHONY : unittest -ifeq (1,$(BUILD_WAS_SPECIFIED)) -unittest : $(addsuffix .run,$(addprefix unittest/,$(D_MODULES))) -else -unittest : unittest-debug unittest-release -unittest-%: - $(MAKE) -f $(MAKEFILE) unittest OS=$(OS) MODEL=$(MODEL) DMD=$(DMD) BUILD=$* -endif - -################################################################################ -# Patterns begin here -################################################################################ - -.PHONY: lib dll -lib: $(LIB) -dll: $(ROOT)/libphobos2.so - -$(ROOT)/%$(DOTOBJ): %.c - @[ -d $(dir $@) ] || mkdir -p $(dir $@) || [ -d $(dir $@) ] - $(CC) -c $(CFLAGS) $< $(OUTFILEFLAG)$@ - -$(LIB): $(OBJS) $(ALL_D_FILES) $(DRUNTIME) - $(DMD) $(DFLAGS) -lib -of$@ $(DRUNTIME) $(D_FILES) $(OBJS) - -$(ROOT)/libphobos2.so: $(ROOT)/$(SONAME) - ln -sf $(notdir $(LIBSO)) $@ - -$(ROOT)/$(SONAME): $(LIBSO) - ln -sf $(notdir $(LIBSO)) $@ - -$(LIBSO): override PIC:=-fPIC -$(LIBSO): $(OBJS) $(ALL_D_FILES) $(DRUNTIMESO) - $(DMD) $(DFLAGS) -shared $(NODEFAULTLIB) -of$@ -L-soname=$(SONAME) $(DRUNTIMESO) $(LINKDL) $(D_FILES) $(OBJS) - -ifeq (osx,$(OS)) -# Build fat library that combines the 32 bit and the 64 bit libraries -libphobos2.a: $(ROOT_OF_THEM_ALL)/osx/release/libphobos2.a -$(ROOT_OF_THEM_ALL)/osx/release/libphobos2.a: - $(MAKE) -f $(MAKEFILE) OS=$(OS) MODEL=32 BUILD=release - $(MAKE) -f $(MAKEFILE) OS=$(OS) MODEL=64 BUILD=release - lipo $(ROOT_OF_THEM_ALL)/osx/release/32/libphobos2.a \ - $(ROOT_OF_THEM_ALL)/osx/release/64/libphobos2.a \ - -create -output $@ -endif - -################################################################################ -# Unittests -################################################################################ - -DISABLED_TESTS = -ifeq ($(OS),freebsd) - ifeq ($(MODEL),32) - # Curl tests for FreeBSD 32-bit are temporarily disabled. - # https://github.com/braddr/d-tester/issues/70 - # https://issues.dlang.org/show_bug.cgi?id=18519 - DISABLED_TESTS += std/net/curl - endif -endif - -$(addsuffix .run,$(addprefix unittest/,$(DISABLED_TESTS))) : - @echo Testing $@ - disabled - -UT_D_OBJS:=$(addprefix $(ROOT)/unittest/,$(addsuffix $(DOTOBJ),$(D_MODULES))) -# need to recompile all unittest objects whenever sth. changes -$(UT_D_OBJS): $(ALL_D_FILES) -$(UT_D_OBJS): $(ROOT)/unittest/%$(DOTOBJ): %.d - @mkdir -p $(dir $@) - $(DMD) $(DFLAGS) $(UDFLAGS) -c -of$@ $< - -ifneq (1,$(SHARED)) - -$(UT_D_OBJS): $(DRUNTIME) - -$(ROOT)/unittest/test_runner: $(DRUNTIME_PATH)/src/test_runner.d $(UT_D_OBJS) $(OBJS) $(DRUNTIME) - $(DMD) $(DFLAGS) $(UDFLAGS) -of$@ $(DRUNTIME_PATH)/src/test_runner.d $(UT_D_OBJS) $(OBJS) $(DRUNTIME) $(LINKDL) $(NODEFAULTLIB) - -else - -UT_LIBSO:=$(ROOT)/unittest/libphobos2-ut.so - -$(UT_D_OBJS): $(DRUNTIMESO) - -$(UT_LIBSO): override PIC:=-fPIC -$(UT_LIBSO): $(UT_D_OBJS) $(OBJS) $(DRUNTIMESO) - $(DMD) $(DFLAGS) -shared $(UDFLAGS) -of$@ $(UT_D_OBJS) $(OBJS) $(DRUNTIMESO) $(LINKDL) $(NODEFAULTLIB) - -$(ROOT)/unittest/test_runner: $(DRUNTIME_PATH)/src/test_runner.d $(UT_LIBSO) - $(DMD) $(DFLAGS) -of$@ $< -L$(UT_LIBSO) $(NODEFAULTLIB) - -endif - -# macro that returns the module name given the src path -moduleName=$(subst /,.,$(1)) - -# target for batch unittests (using shared phobos library and test_runner) -unittest/%.run : $(ROOT)/unittest/test_runner - $(QUIET)$(TIMELIMIT)$(RUN) $< $(call moduleName,$*) - -# Target for quickly running a single unittest (using static phobos library). -# For example: "make std/algorithm/mutation.test" -# The mktemp business is needed so .o files don't clash in concurrent unittesting. -%.test : %.d $(LIB) - T=`mktemp -d /tmp/.dmd-run-test.XXXXXX` && \ - ( \ - $(DMD) -od$$T $(DFLAGS) -main $(UDFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL) -cov=ctfe -run $< ; \ - RET=$$? ; rm -rf $$T ; exit $$RET \ - ) - -# Target for quickly unittesting all modules and packages within a package, -# transitively. For example: "make std/algorithm.test" -%.test : $(LIB) - $(MAKE) -f $(MAKEFILE) $(addsuffix .test,$(patsubst %.d,%,$(wildcard $*/*))) - -# Recursive target for %.debug -# It has to be recursive as %.debug depends on $(LIB) and we don't want to -# force the user to call make with BUILD=debug. -# Therefore we call %.debug_with_debugger and pass BUILD=debug from %.debug -# This forces all of phobos to have debug symbols, which we need as we don't -# know where debugging is leading us. -%.debug_with_debugger : %.d $(LIB) - $(DMD) $(DFLAGS) -main $(UDFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL) $< - $(DEBUGGER) ./$(basename $(notdir $<)) - -# Target for quickly debugging a single module -# For example: make -f posix.mak DEBUGGER=ddd std/format.debug -# ddd in this case is a graphical frontend to gdb -%.debug : %.d - BUILD=debug $(MAKE) -f $(MAKEFILE) $(basename $<).debug_with_debugger - -################################################################################ -# More stuff -################################################################################ - -# Disable implicit rule -%$(DOTEXE) : %$(DOTOBJ) - -%/.directory : - mkdir -p $* || exists $* - touch $@ - -clean : - rm -rf $(ROOT_OF_THEM_ALL) $(ZIPFILE) - -gitzip: - git archive --format=zip HEAD > $(ZIPFILE) - -zip : - -rm -f $(ZIPFILE) - zip -r $(ZIPFILE) . -x .git\* -x generated\* - -install2 : all - $(eval lib_dir=$(if $(filter $(OS),osx), lib, lib$(MODEL))) - mkdir -p $(INSTALL_DIR)/$(OS)/$(lib_dir) - cp $(LIB) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ -ifeq (1,$(SHARED)) - cp -P $(LIBSO) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ - cp -P $(ROOT)/$(SONAME) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ - cp -P $(ROOT)/libphobos2.so $(INSTALL_DIR)/$(OS)/$(lib_dir)/ -endif - mkdir -p $(INSTALL_DIR)/src/phobos/etc - mkdir -p $(INSTALL_DIR)/src/phobos/std - cp -r std/* $(INSTALL_DIR)/src/phobos/std/ - cp -r etc/* $(INSTALL_DIR)/src/phobos/etc/ - cp LICENSE_1_0.txt $(INSTALL_DIR)/phobos-LICENSE.txt - -ifeq (1,$(CUSTOM_DRUNTIME)) -# We consider a custom-set DRUNTIME a sign they build druntime themselves -else -# This rule additionally produces $(DRUNTIMESO). Add a fake dependency -# to always invoke druntime's make. Use FORCE instead of .PHONY to -# avoid rebuilding phobos when $(DRUNTIME) didn't change. -$(DRUNTIME): FORCE - $(MAKE) -C $(DRUNTIME_PATH) -f posix.mak MODEL=$(MODEL) DMD=$(abspath $(DMD)) OS=$(OS) BUILD=$(BUILD) - -ifeq (,$(findstring win,$(OS))) -$(DRUNTIMESO): $(DRUNTIME) -endif - -FORCE: - -endif - -JSON = phobos.json -json : $(JSON) -$(JSON) : $(ALL_D_FILES) - $(DMD) $(DFLAGS) -o- -Xf$@ $^ - -########################################################### -# HTML documentation -# the following variables will be set by dlang.org: -# DOC_OUTPUT_DIR, STDDOC -########################################################### -SRC_DOCUMENTABLES = index.dd $(addsuffix .d,$(STD_MODULES) $(EXTRA_DOCUMENTABLES)) -# Set DDOC, the documentation generator -DDOC=$(DMD) -conf= $(MODEL_FLAG) -w -c -o- -version=StdDdoc \ - -I$(DRUNTIME_PATH)/import $(DMDEXTRAFLAGS) - -# D file to html, e.g. std/conv.d -> std_conv.html -# But "package.d" is special cased: std/range/package.d -> std_range.html -D2HTML=$(foreach p,$1,$(if $(subst package.d,,$(notdir $p)),$(subst /,_,$(subst .d,.html,$(subst .dd,.html,$p))),$(subst /,_,$(subst /package.d,.html,$p)))) - -HTMLS=$(addprefix $(DOC_OUTPUT_DIR)/, \ - $(call D2HTML, $(SRC_DOCUMENTABLES))) - -$(DOC_OUTPUT_DIR)/. : - mkdir -p $@ - -# For each module, define a rule e.g.: -# ../web/phobos/std_conv.html : std/conv.d $(STDDOC) ; ... -$(foreach p,$(SRC_DOCUMENTABLES),$(eval \ -$(DOC_OUTPUT_DIR)/$(call D2HTML,$p) : $p $(STDDOC) ;\ - $(DDOC) project.ddoc $(STDDOC) -Df$$@ $$<)) - -# this target is called by dlang.org -html : $(DOC_OUTPUT_DIR)/. $(HTMLS) - -build-html: - ${MAKE} -C $(DLANG_ORG_DIR) -f posix.mak phobos-prerelease - -################################################################################ -# Automatically create dlang/tools repository if non-existent -################################################################################ - -${TOOLS_DIR}: - git clone --depth=1 ${GIT_HOME}/$(@F) $@ - -$(TOOLS_DIR)/checkwhitespace.d: | $(TOOLS_DIR) -$(TOOLS_DIR)/tests_extractor.d: | $(TOOLS_DIR) - -#################### test for undesired white spaces ########################## -CWS_TOCHECK = posix.mak win32.mak win64.mak -CWS_TOCHECK += $(ALL_D_FILES) index.dd - -checkwhitespace: $(LIB) $(TOOLS_DIR)/checkwhitespace.d - $(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -run $(TOOLS_DIR)/checkwhitespace.d $(CWS_TOCHECK) - -############################# -# Submission to Phobos are required to conform to the DStyle -# The tests below automate some, but not all parts of the DStyle guidelines. -# See also: http://dlang.org/dstyle.html -############################# - -$(DSCANNER_DIR): - git clone https://github.com/dlang-community/Dscanner $@ - git -C $@ checkout $(DSCANNER_HASH) - git -C $@ submodule update --init --recursive - -$(DSCANNER_DIR)/dsc: | $(DSCANNER_DIR) $(DMD) $(LIB) - # debug build is faster, but disable 'missing import' messages (missing core from druntime) - sed 's/dparse_verbose/StdLoggerDisableWarning/' $(DSCANNER_DIR)/makefile > $(DSCANNER_DIR)/dscanner_makefile_tmp - mv $(DSCANNER_DIR)/dscanner_makefile_tmp $(DSCANNER_DIR)/makefile - DC=$(abspath $(DMD)) DFLAGS="$(DFLAGS) -defaultlib=$(LIB)" $(MAKE) -C $(DSCANNER_DIR) githash debug - -style: style_lint publictests - -# runs static code analysis with Dscanner -dscanner: $(LIB) - @# The dscanner target is without dependencies to avoid constant rebuilds of Phobos (`make` always rebuilds order-only dependencies) - @# However, we still need to ensure that the DScanner binary is built once - @[ -f $(DSCANNER_DIR)/dsc ] || ${MAKE} -f posix.mak $(DSCANNER_DIR)/dsc - @echo "Running DScanner" - $(DSCANNER_DIR)/dsc --config .dscanner.ini -I $(DRUNTIME_PATH)/src/ --styleCheck etc std -I. - -style_lint_shellcmds: - @echo "Check for trailing whitespace" - grep -nr '[[:blank:]]$$' $$(find etc std -name '*.d'); test $$? -eq 1 - - @echo "Enforce whitespace before opening parenthesis" - grep -nrE "\<(for|foreach|foreach_reverse|if|while|switch|catch|version)\(" $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce no whitespace after opening parenthesis" - grep -nrE "\<(version) \( " $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce whitespace between colon(:) for import statements (doesn't catch everything)" - grep -nr 'import [^/,=]*:.*;' $$(find etc std -name '*.d') | grep -vE "import ([^ ]+) :\s"; test $$? -eq 1 - - @echo "Check for package wide std.algorithm imports" - grep -nr 'import std.algorithm : ' $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce Allman style" - grep -nrE '(if|for|foreach|foreach_reverse|while|unittest|switch|else|version) .*{$$' $$(find etc std -name '*.d'); test $$? -eq 1 - - @echo "Enforce do { to be in Allman style" - grep -nr 'do *{$$' $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce no space between assert and the opening brace, i.e. assert(" - grep -nrE 'assert +\(' $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce space after cast(...)" - grep -nrE '[^"]cast\([^)]*?\)[[:alnum:]]' $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce space between a .. b" - grep -nrE '[[:alnum:]][.][.][[:alnum:]]|[[:alnum:]] [.][.][[:alnum:]]|[[:alnum:]][.][.] [[:alnum:]]' $$(find etc std -name '*.d' | grep -vE 'std/string.d|std/uni/package.d') ; test $$? -eq 1 - - @echo "Enforce space between binary operators" - grep -nrE "[[:alnum:]](==|!=|<=|<<|>>|>>>|^^)[[:alnum:]]|[[:alnum:]] (==|!=|<=|<<|>>|>>>|^^)[[:alnum:]]|[[:alnum:]](==|!=|<=|<<|>>|>>>|^^) [[:alnum:]]" $$(find etc std -name '*.d'); test $$? -eq 1 - - @echo "Validate changelog files (Do _not_ use REF in the title!)" - @for file in $$(find changelog -name '*.dd') ; do \ - cat $$file | head -n1 | grep -nqE '\$$\((REF|LINK2|HTTP|MREF)' && \ - { echo "$$file: The title line can't contain links - it's already a link" && exit 1; } ;\ - cat $$file | head -n2 | tail -n1 | grep -q '^$$' || \ - { echo "$$file: After the title line an empty, separating line is expected" && exit 1; } ;\ - cat $$file | head -n3 | tail -n1 | grep -nqE '^.{1,}$$' || \ - { echo "$$file: The title is supposed to be followed by a long description" && exit 1; } ;\ - done - -style_lint: style_lint_shellcmds dscanner - @echo "Check that Ddoc runs without errors" - $(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -w -D -Df/dev/null -main -c -o- $$(find etc std -type f -name '*.d') 2>&1 - -################################################################################ -# Build the test extractor. -# - extracts and runs public unittest examples to checks for missing imports -# - extracts and runs @betterC unittests -################################################################################ - -$(TESTS_EXTRACTOR): $(TOOLS_DIR)/tests_extractor.d | $(LIB) - DFLAGS="$(DFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL)" $(DUB) build --force --compiler=$${PWD}/$(DMD) --single $< - mv $(TOOLS_DIR)/tests_extractor $@ - -test_extractor: $(TESTS_EXTRACTOR) - -################################################################################ -# Extract public tests of a module and test them in an separate file (i.e. without its module) -# This is done to check for potentially missing imports in the examples, e.g. -# make -f posix.mak std/format.publictests -################################################################################ - -publictests: $(addsuffix .publictests,$(D_MODULES)) - -%.publictests: %.d $(LIB) $(TESTS_EXTRACTOR) | $(PUBLICTESTS_DIR)/.directory - @$(TESTS_EXTRACTOR) --inputdir $< --outputdir $(PUBLICTESTS_DIR) - @$(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -main -unittest -run $(PUBLICTESTS_DIR)/$(subst /,_,$<) - -################################################################################ -# Check and run @betterC tests -# ---------------------------- -# -# Extract @betterC tests of a module and run them in -betterC -# -# make -f posix.mak std/format.betterc -################################################################################ - -betterc-phobos-tests: $(addsuffix .betterc,$(D_MODULES)) -betterc: betterc-phobos-tests - -%.betterc: %.d | $(BETTERCTESTS_DIR)/.directory - @# Due to the FORCE rule on druntime, make will always try to rebuild Phobos (even as an order-only dependency) - @# However, we still need to ensure that the test_extractor is built once - @[ -f "$(TESTS_EXTRACTOR)" ] || ${MAKE} -f posix.mak "$(TESTS_EXTRACTOR)" - $(TESTS_EXTRACTOR) --betterC --attributes betterC \ - --inputdir $< --outputdir $(BETTERCTESTS_DIR) - $(DMD) $(DFLAGS) $(NODEFAULTLIB) -betterC -unittest -run $(BETTERCTESTS_DIR)/$(subst /,_,$<) - - -################################################################################ -# Full-module BetterC tests -# ------------------------- -# -# Test full modules with -betterC. Edit BETTERC_MODULES and -# test/betterc_module_tests.d to add new modules to the list. -# -# make -f posix.mak betterc-module-tests -################################################################################ - -BETTERC_MODULES=std/sumtype - -betterc: betterc-module-tests - -betterc-module-tests: $(ROOT)/betterctests/betterc_module_tests - $(ROOT)/betterctests/betterc_module_tests - -$(ROOT)/betterctests/betterc_module_tests: test/betterc_module_tests.d $(addsuffix .d,$(BETTERC_MODULES)) - $(DMD) $(DFLAGS) $(NODEFAULTLIB) -of=$(ROOT)/betterctests/betterc_module_tests -betterC -unittest test/betterc_module_tests.d $(addsuffix .d,$(BETTERC_MODULES)) - -################################################################################ - -.PHONY : auto-tester-build -auto-tester-build: - echo "Auto-Tester has been disabled" - -.PHONY : auto-tester-test -auto-tester-test: - echo "Auto-Tester has been disabled" - -.PHONY: buildkite-test -buildkite-test: unittest betterc - -.PHONY: autodecode-test -autodecode-test: $(addsuffix .test,$(NO_AUTODECODE_MODULES)) - -.DELETE_ON_ERROR: # GNU Make directive (delete output files on error) +%: + $(MAKE) -f Makefile $@ diff --git a/win32.mak b/win32.mak deleted file mode 100644 index b29fad7589e..00000000000 --- a/win32.mak +++ /dev/null @@ -1,574 +0,0 @@ -# Makefile to build D runtime library phobos.lib for Win32 OMF -# MS COFF builds use win64.mak for 32 and 64 bit -# -# Prerequisites: -# Digital Mars dmc, lib, and make that are unzipped from Digital Mars C: -# http://ftp.digitalmars.com/Digital_Mars_C++/Patch/dm850c.zip -# and are in the \dm\bin directory. -# Targets: -# make -# Same as make unittest -# make phobos.lib -# Build phobos.lib -# make clean -# Delete unneeded files created by build process -# make unittest -# Build phobos.lib, build and run unit tests -# make cov -# Build for coverage tests, run coverage tests -# Notes: -# minit.obj requires Microsoft MASM386.EXE to build from minit.asm, -# or just use the supplied minit.obj - -# Ignored, only the default value is supported -# MODEL=32omf - -## Copy command - -CP=cp - -## Directory where dmd has been installed - -DIR=\dmd2 - -## Flags for dmc C compiler - -CFLAGS=-mn -6 -r -#CFLAGS=-g -mn -6 -r - -## Location of druntime tree - -DRUNTIME=../dmd/druntime -DRUNTIMELIB=$(DRUNTIME)/lib/druntime.lib - -## Flags for dmd D compiler - -DFLAGS=-m32omf -conf= -O -release -w -de -preview=dip1000 -preview=dtorfields -preview=fieldwise -I$(DRUNTIME)\import -#DFLAGS=-unittest -g -#DFLAGS=-unittest -cov -g - -## Flags for compiling unittests - -UDFLAGS=-m32omf -unittest -version=StdUnittest -version=CoreUnittest -conf= -O -w -preview=dip1000 -preview=fieldwise -I$(DRUNTIME)\import - -## C compiler - -CC=dmc -AR=lib -MAKE=make - -## D compiler - -DMD_DIR=../dmd -BUILD=release -OS=windows -DMD=$(DMD_DIR)/generated/$(OS)/$(BUILD)/32/dmd - -## Zlib library - -ZLIB=etc\c\zlib\zlib.lib - -.c.obj: -# $(CC) -c $(CFLAGS) $* - $(DMD) -c $(DFLAGS) -I. -v $* - -.cpp.obj: - $(CC) -c $(CFLAGS) $* - -.d.obj: - $(DMD) -c $(DFLAGS) $* - -.asm.obj: - $(CC) -c $* - -LIB=phobos.lib - -targets : $(LIB) - -test : test.exe - -test.obj : test.d - $(DMD) -conf= -c test -g $(UDFLAGS) - -test.exe : test.obj $(LIB) - $(DMD) -conf= test.obj -g -L/map - -# ti_bit.obj ti_Abit.obj - -SRC= \ - unittest.d \ - index.dd - -# The separation is a workaround for bug 4904 (optlink bug 3372). -SRC_STD_1= \ - std\stdio.d \ - std\string.d \ - std\file.d - -SRC_STD_2a= \ - std\array.d \ - std\functional.d \ - std\path.d \ - std\outbuffer.d \ - std\utf.d - -SRC_STD_3= \ - std\csv.d \ - std\complex.d \ - std\numeric.d \ - std\bigint.d \ - std\bitmanip.d \ - std\typecons.d \ - std\base64.d \ - std\ascii.d \ - std\demangle.d \ - std\uri.d \ - std\mmfile.d \ - std\getopt.d - -SRC_STD_3a= \ - std\signals.d \ - std\meta.d \ - std\typetuple.d \ - std\traits.d \ - std\encoding.d \ - std\random.d \ - std\exception.d \ - std\compiler.d \ - std\system.d \ - std\concurrency.d - -SRC_STD_4= \ - std\int128.d \ - std\uuid.d - -SRC_STD_6= \ - std\variant.d \ - std\zlib.d \ - std\socket.d \ - std\conv.d \ - std\zip.d - -SRC_STD_7= \ - std\stdint.d \ - std\json.d \ - std\parallelism.d \ - std\mathspecial.d \ - std\process.d \ - std\package.d - -SRC_STD_7a= \ - std\sumtype.d - -SRC_STD= \ - $(SRC_STD_1) \ - $(SRC_STD_2a) \ - $(SRC_STD_3) \ - $(SRC_STD_3a) \ - $(SRC_STD_4) \ - $(SRC_STD_6) \ - $(SRC_STD_7) \ - $(SRC_STD_7a) - -SRC_STD_ALGO= \ - std\algorithm\package.d \ - std\algorithm\comparison.d \ - std\algorithm\iteration.d \ - std\algorithm\mutation.d \ - std\algorithm\searching.d \ - std\algorithm\setops.d \ - std\algorithm\sorting.d \ - std\algorithm\internal.d - -SRC_STD_CONTAINER= \ - std\container\array.d \ - std\container\binaryheap.d \ - std\container\dlist.d \ - std\container\rbtree.d \ - std\container\slist.d \ - std\container\util.d \ - std\container\package.d - -SRC_STD_DATETIME= \ - std\datetime\date.d \ - std\datetime\interval.d \ - std\datetime\package.d \ - std\datetime\stopwatch.d \ - std\datetime\systime.d \ - std\datetime\timezone.d - -SRC_STD_DIGEST= \ - std\digest\crc.d \ - std\digest\sha.d \ - std\digest\md.d \ - std\digest\ripemd.d \ - std\digest\hmac.d \ - std\digest\murmurhash.d \ - std\digest\package.d - -SRC_STD_FORMAT= \ - std\format\package.d \ - std\format\read.d \ - std\format\spec.d \ - std\format\write.d \ - std\format\internal\floats.d \ - std\format\internal\read.d \ - std\format\internal\write.d - -SRC_STD_MATH= \ - std\math\algebraic.d \ - std\math\constants.d \ - std\math\exponential.d \ - std\math\operations.d \ - std\math\hardware.d \ - std\math\package.d \ - std\math\remainder.d \ - std\math\rounding.d \ - std\math\traits.d \ - std\math\trigonometry.d - -SRC_STD_NET= \ - std\net\isemail.d \ - std\net\curl.d - -SRC_STD_RANGE= \ - std\range\package.d \ - std\range\primitives.d \ - std\range\interfaces.d - -SRC_STD_REGEX= \ - std\regex\internal\ir.d \ - std\regex\package.d \ - std\regex\internal\parser.d \ - std\regex\internal\tests.d \ - std\regex\internal\tests2.d \ - std\regex\internal\backtracking.d \ - std\regex\internal\thompson.d \ - std\regex\internal\kickstart.d \ - std\regex\internal\generator.d - -SRC_STD_WIN= \ - std\windows\registry.d \ - std\windows\syserror.d \ - std\windows\charset.d - -SRC_STD_INTERNAL= \ - std\internal\cstring.d \ - std\internal\memory.d \ - std\internal\unicode_tables.d \ - std\internal\unicode_comp.d \ - std\internal\unicode_decomp.d \ - std\internal\unicode_grapheme.d \ - std\internal\unicode_norm.d \ - std\internal\scopebuffer.d \ - std\internal\test\dummyrange.d \ - std\internal\test\range.d - -SRC_STD_INTERNAL_DIGEST= \ - std\internal\digest\sha_SSSE3.d - -SRC_STD_INTERNAL_MATH= \ - std\internal\math\biguintcore.d \ - std\internal\math\biguintnoasm.d \ - std\internal\math\biguintx86.d \ - std\internal\math\gammafunction.d \ - std\internal\math\errorfunction.d - -SRC_STD_INTERNAL_WINDOWS= \ - std\internal\windows\advapi32.d - -SRC_STD_EXP= \ - std\checkedint.d std\experimental\checkedint.d - -SRC_STD_UNI = std\uni\package.d \ - -SRC_STD_EXP_ALLOC_BB= \ - std\experimental\allocator\building_blocks\affix_allocator.d \ - std\experimental\allocator\building_blocks\aligned_block_list.d \ - std\experimental\allocator\building_blocks\allocator_list.d \ - std\experimental\allocator\building_blocks\ascending_page_allocator.d \ - std\experimental\allocator\building_blocks\bitmapped_block.d \ - std\experimental\allocator\building_blocks\bucketizer.d \ - std\experimental\allocator\building_blocks\fallback_allocator.d \ - std\experimental\allocator\building_blocks\free_list.d \ - std\experimental\allocator\building_blocks\free_tree.d \ - std\experimental\allocator\building_blocks\kernighan_ritchie.d \ - std\experimental\allocator\building_blocks\null_allocator.d \ - std\experimental\allocator\building_blocks\quantizer.d \ - std\experimental\allocator\building_blocks\region.d \ - std\experimental\allocator\building_blocks\scoped_allocator.d \ - std\experimental\allocator\building_blocks\segregator.d \ - std\experimental\allocator\building_blocks\stats_collector.d \ - std\experimental\allocator\building_blocks\package.d - -SRC_STD_EXP_ALLOC= \ - std\experimental\allocator\common.d \ - std\experimental\allocator\gc_allocator.d \ - std\experimental\allocator\mallocator.d \ - std\experimental\allocator\mmap_allocator.d \ - std\experimental\allocator\showcase.d \ - std\experimental\allocator\typed.d \ - std\experimental\allocator\package.d \ - $(SRC_STD_EXP_ALLOC_BB) - -SRC_STD_EXP_LOGGER= \ - std\experimental\logger\core.d \ - std\experimental\logger\filelogger.d \ - std\experimental\logger\multilogger.d \ - std\experimental\logger\nulllogger.d \ - std\experimental\logger\package.d - -SRC_STD_LOGGER= \ - std\logger\core.d \ - std\logger\filelogger.d \ - std\logger\multilogger.d \ - std\logger\nulllogger.d \ - std\logger\package.d - -SRC_ETC= - -SRC_ETC_C= \ - etc\c\zlib.d \ - etc\c\curl.d \ - etc\c\sqlite3.d \ - etc\c\odbc\sql.d \ - etc\c\odbc\sqlext.d \ - etc\c\odbc\sqltypes.d \ - etc\c\odbc\sqlucode.d - -SRC_TO_COMPILE= \ - $(SRC_STD) \ - $(SRC_STD_ALGO) \ - $(SRC_STD_CONTAINER) \ - $(SRC_STD_DATETIME) \ - $(SRC_STD_DIGEST) \ - $(SRC_STD_FORMAT) \ - $(SRC_STD_MATH) \ - $(SRC_STD_NET) \ - $(SRC_STD_RANGE) \ - $(SRC_STD_REGEX) \ - $(SRC_STD_C) \ - $(SRC_STD_WIN) \ - $(SRC_STD_C_WIN) \ - $(SRC_STD_INTERNAL) \ - $(SRC_STD_INTERNAL_DIGEST) \ - $(SRC_STD_INTERNAL_MATH) \ - $(SRC_STD_INTERNAL_WINDOWS) \ - $(SRC_STD_EXP) \ - $(SRC_STD_UNI) \ - $(SRC_STD_EXP_ALLOC) \ - $(SRC_STD_EXP_LOGGER) \ - $(SRC_STD_LOGGER) \ - $(SRC_ETC) \ - $(SRC_ETC_C) - -SRC_ZLIB= \ - etc\c\zlib\crc32.h \ - etc\c\zlib\deflate.h \ - etc\c\zlib\gzguts.h \ - etc\c\zlib\inffixed.h \ - etc\c\zlib\inffast.h \ - etc\c\zlib\inftrees.h \ - etc\c\zlib\inflate.h \ - etc\c\zlib\trees.h \ - etc\c\zlib\zconf.h \ - etc\c\zlib\zlib.h \ - etc\c\zlib\zutil.h \ - etc\c\zlib\adler32.c \ - etc\c\zlib\compress.c \ - etc\c\zlib\crc32.c \ - etc\c\zlib\deflate.c \ - etc\c\zlib\gzclose.c \ - etc\c\zlib\gzlib.c \ - etc\c\zlib\gzread.c \ - etc\c\zlib\gzwrite.c \ - etc\c\zlib\infback.c \ - etc\c\zlib\inffast.c \ - etc\c\zlib\inflate.c \ - etc\c\zlib\inftrees.c \ - etc\c\zlib\trees.c \ - etc\c\zlib\uncompr.c \ - etc\c\zlib\zutil.c - -$(LIB) : $(SRC_TO_COMPILE) \ - $(ZLIB) $(DRUNTIMELIB) win32.mak win64.mak - $(DMD) -lib -of$(LIB) -Xfphobos.json $(DFLAGS) $(SRC_TO_COMPILE) \ - $(ZLIB) $(DRUNTIMELIB) - -UNITTEST_OBJS= \ - unittest1.obj \ - unittest2.obj \ - unittest2a.obj \ - unittest3.obj \ - unittest3a.obj \ - unittest3b.obj \ - unittest4.obj \ - unittest5.obj \ - unittest5a.obj \ - unittest5b.obj \ - unittest6.obj \ - unittest6a.obj \ - unittest6b.obj \ - unittest7.obj \ - unittest7a.obj \ - unittest8a.obj \ - unittest8b.obj \ - unittest8c.obj \ - unittest8d.obj \ - unittest8e.obj \ - unittest8f.obj - -unittest : $(LIB) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest1.obj $(SRC_STD_1) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest2.obj $(SRC_STD_RANGE) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest2a.obj $(SRC_STD_2a) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest3.obj $(SRC_STD_3) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest3a.obj $(SRC_STD_3a) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest3b.obj $(SRC_STD_DATETIME) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest4.obj $(SRC_STD_4) $(SRC_STD_DIGEST) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest5.obj $(SRC_STD_ALGO) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest5a.obj $(SRC_STD_FORMAT) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest5b.obj $(SRC_STD_MATH) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest6.obj $(SRC_STD_6) $(SRC_STD_CONTAINER) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest6a.obj $(SRC_STD_EXP_ALLOC) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest6b.obj $(SRC_STD_LOGGER) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest7.obj $(SRC_STD_7) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest7a.obj $(SRC_STD_7a) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8a.obj $(SRC_STD_REGEX) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8b.obj $(SRC_STD_NET) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8c.obj $(SRC_STD_C) $(SRC_STD_WIN) $(SRC_STD_C_WIN) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8d.obj $(SRC_STD_INTERNAL) $(SRC_STD_INTERNAL_DIGEST) $(SRC_STD_INTERNAL_MATH) $(SRC_STD_INTERNAL_WINDOWS) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8e.obj $(SRC_ETC) $(SRC_ETC_C) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8f.obj $(SRC_STD_EXP) - $(DMD) $(UDFLAGS) -L/co unittest.d $(UNITTEST_OBJS) \ - $(ZLIB) $(DRUNTIMELIB) - .\unittest.exe - -#unittest : unittest.exe -# unittest -# -#unittest.exe : unittest.d $(LIB) -# $(DMD) -conf= unittest -g -# dmc unittest.obj -g - -cov : $(SRC_TO_COMPILE) $(LIB) -# $(DMD) -conf= -cov=ctfe -cov $(UDFLAGS) -ofcov.exe -main $(SRC_TO_COMPILE) $(LIB) -# cov - del *.lst - $(DMD) -conf= -cov=ctfe -cov=83 $(UDFLAGS) -main -run std\stdio.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\string.d - $(DMD) -conf= -cov=ctfe -cov=83 $(UDFLAGS) -main -run std\file.d - $(DMD) -conf= -cov=ctfe -cov=86 $(UDFLAGS) -main -run std\range\package.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\array.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\functional.d - $(DMD) -conf= -cov=ctfe -cov=96 $(UDFLAGS) -main -run std\path.d - $(DMD) -conf= -cov=ctfe -cov=41 $(UDFLAGS) -main -run std\outbuffer.d - $(DMD) -conf= -cov=ctfe -cov=89 $(UDFLAGS) -main -run std\utf.d - $(DMD) -conf= -cov=ctfe -cov=93 $(UDFLAGS) -main -run std\csv.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\complex.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\int128.d - $(DMD) -conf= -cov=ctfe -cov=70 $(UDFLAGS) -main -run std\numeric.d - $(DMD) -conf= -cov=ctfe -cov=94 $(UDFLAGS) -main -run std\bigint.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\bitmanip.d - $(DMD) -conf= -cov=ctfe -cov=82 $(UDFLAGS) -main -run std\typecons.d - $(DMD) -conf= -cov=ctfe -cov=44 $(UDFLAGS) -main -run std\uni\package.d - $(DMD) -conf= -cov=ctfe -cov=91 $(UDFLAGS) -main -run std\base64.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\ascii.d - $(DMD) -conf= -cov=ctfe -cov=0 $(UDFLAGS) -main -run std\demangle.d - $(DMD) -conf= -cov=ctfe -cov=57 $(UDFLAGS) -main -run std\uri.d - $(DMD) -conf= -cov=ctfe -cov=51 $(UDFLAGS) -main -run std\mmfile.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\getopt.d - $(DMD) -conf= -cov=ctfe -cov=92 $(UDFLAGS) -main -run std\signals.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\meta.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\typetuple.d - $(DMD) -conf= -cov=ctfe -cov=85 $(UDFLAGS) -main -run std\traits.d - $(DMD) -conf= -cov=ctfe -cov=62 $(UDFLAGS) -main -run std\encoding.d - $(DMD) -conf= -cov=ctfe -cov=79 $(UDFLAGS) -main -run std\random.d - $(DMD) -conf= -cov=ctfe -cov=92 $(UDFLAGS) -main -run std\exception.d - $(DMD) -conf= -cov=ctfe -cov=73 $(UDFLAGS) -main -run std\concurrency.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\date.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\interval.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\package.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\stopwatch.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\systime.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\timezone.d - $(DMD) -conf= -cov=ctfe -cov=96 $(UDFLAGS) -main -run std\uuid.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\digest\crc.d - $(DMD) -conf= -cov=ctfe -cov=55 $(UDFLAGS) -main -run std\digest\sha.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\digest\md.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\digest\ripemd.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\digest\hmac.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\package.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\comparison.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\iteration.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\mutation.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\searching.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\setops.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\sorting.d - $(DMD) -conf= -cov=ctfe -cov=71 $(UDFLAGS) -main -run std\format\package.d - $(DMD) -conf= -cov=ctfe -cov=71 $(UDFLAGS) -main -run std\math\package.d - $(DMD) -conf= -cov=ctfe -cov=83 $(UDFLAGS) -main -run std\variant.d - $(DMD) -conf= -cov=ctfe -cov=58 $(UDFLAGS) -main -run std\zlib.d - $(DMD) -conf= -cov=ctfe -cov=53 $(UDFLAGS) -main -run std\socket.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\container\array.d - $(DMD) -conf= -cov=ctfe -cov=68 $(UDFLAGS) -main -run std\container\binaryheap.d - $(DMD) -conf= -cov=ctfe -cov=91 $(UDFLAGS) -main -run std\container\dlist.d - $(DMD) -conf= -cov=ctfe -cov=93 $(UDFLAGS) -main -run std\container\rbtree.d - $(DMD) -conf= -cov=ctfe -cov=92 $(UDFLAGS) -main -run std\container\slist.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\container\util.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\container\package.d - $(DMD) -conf= -cov=ctfe -cov=90 $(UDFLAGS) -main -run std\conv.d - $(DMD) -conf= -cov=ctfe -cov=0 $(UDFLAGS) -main -run std\zip.d - $(DMD) -conf= -cov=ctfe -cov=77 $(UDFLAGS) -main -run std\regex\tests.d - $(DMD) -conf= -cov=ctfe -cov=77 $(UDFLAGS) -main -run std\regex\tests2.d - $(DMD) -conf= -cov=ctfe -cov=92 $(UDFLAGS) -main -run std\json.d - $(DMD) -conf= -cov=ctfe -cov=87 $(UDFLAGS) -main -run std\parallelism.d - $(DMD) -conf= -cov=ctfe -cov=50 $(UDFLAGS) -main -run std\mathspecial.d - $(DMD) -conf= -cov=ctfe -cov=71 $(UDFLAGS) -main -run std\process.d - $(DMD) -conf= -cov=ctfe -cov=70 $(UDFLAGS) -main -run std\net\isemail.d - $(DMD) -conf= -cov=ctfe -cov=2 $(UDFLAGS) -main -run std\net\curl.d - $(DMD) -conf= -cov=ctfe -cov=60 $(UDFLAGS) -main -run std\windows\registry.d - $(DMD) -conf= -cov=ctfe -cov=0 $(UDFLAGS) -main -run std\internal\digest\sha_SSSE3.d - $(DMD) -conf= -cov=ctfe -cov=50 $(UDFLAGS) -main -run std\internal\math\biguintcore.d - $(DMD) -conf= -cov=ctfe -cov=75 $(UDFLAGS) -main -run std\internal\math\biguintnoasm.d -# $(DMD) -conf= -cov=ctfe -cov $(UDFLAGS) -main -run std\internal\math\biguintx86.d - $(DMD) -conf= -cov=ctfe -cov=94 $(UDFLAGS) -main -run std\internal\math\gammafunction.d - $(DMD) -conf= -cov=ctfe -cov=92 $(UDFLAGS) -main -run std\internal\math\errorfunction.d - $(DMD) -conf= -cov=ctfe -cov=31 $(UDFLAGS) -main -run std\internal\windows\advapi32.d - $(DMD) -conf= -cov=ctfe -cov=58 $(UDFLAGS) -main -run etc\c\zlib.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\sumtype.d - -###################################################### - -$(ZLIB): $(SRC_ZLIB) - cd etc\c\zlib - $(MAKE) -f win32.mak zlib.lib CC=$(CC) LIB=$(AR) - cd ..\..\.. - -###################################################### - -zip: - del phobos.zip - zip32 -r phobos.zip . -x .git\* -x \*.lib -x \*.obj - -phobos.zip : zip - -clean: - cd etc\c\zlib - $(MAKE) -f win32.mak clean - cd ..\..\.. - del $(DOCS) - del $(UNITTEST_OBJS) unittest.obj unittest.exe - del $(LIB) - del phobos.json - -install: phobos.zip - $(CP) phobos.lib phobos64.lib $(DIR)\windows\lib - +rd/s/q $(DIR)\src\phobos - unzip -o phobos.zip -d $(DIR)\src\phobos - -auto-tester-build: - echo "Auto-Tester has been disabled" - -auto-tester-test: - echo "Auto-Tester has been disabled" diff --git a/win64.mak b/win64.mak deleted file mode 100644 index f094ab12170..00000000000 --- a/win64.mak +++ /dev/null @@ -1,516 +0,0 @@ -# Makefile to build D runtime library phobos{64,32mscoff}.lib for Windows MSVC -# Prerequisites: -# Microsoft Visual Studio -# Targets: -# make -# Same as make unittest -# make phobos64.lib -# Build phobos64.lib -# make clean -# Delete unneeded files created by build process -# make unittest -# Build phobos64.lib, build and run unit tests -# make cov -# Build for coverage tests, run coverage tests -# make MODEL=32mscoff phobos32mscoff.lib -# Build phobos32mscoff.lib (with x86 cl.exe in PATH, otherwise set CC & AR manually) - -## Memory model (32mscoff or 64) -MODEL=64 - -## Assume MSVC cl.exe & lib.exe in PATH are set up for the target MODEL. -## Otherwise set them explicitly, e.g., to `C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx86\x86\cl.exe`. -CC=cl -AR=lib - -MAKE=make - -## Directory where dmd has been installed - -DIR=\dmd2 - -## Flags for VC compiler - -CFLAGS=/O2 /nologo - -## Location of druntime tree - -DRUNTIME=../dmd/druntime -DRUNTIMELIB=$(DRUNTIME)/lib/druntime$(MODEL).lib - -## Flags for dmd D compiler - -DFLAGS=-conf= -m$(MODEL) -O -release -w -de -preview=dip1000 -preview=dtorfields -preview=fieldwise -I$(DRUNTIME)\import - -## Flags for compiling unittests - -UDFLAGS=-conf= -g -m$(MODEL) -O -w -preview=dip1000 -preview=fieldwise -I$(DRUNTIME)\import -unittest -version=StdUnittest -version=CoreUnittest - -## D compiler - -DMD_DIR=../dmd -BUILD=release -OS=windows -DMD=$(DMD_DIR)/generated/$(OS)/$(BUILD)/$(MODEL)/dmd - -## Zlib library - -ZLIB=etc\c\zlib\zlib$(MODEL).lib - -.c.obj: -# "$(CC)" -c $(CFLAGS) $*.c - $(DMD) -c $(DFLAGS) -I. -v $*.c - -.cpp.obj: - "$(CC)" -c $(CFLAGS) $*.cpp - -.d.obj: - "$(DMD)" -c $(DFLAGS) $* - -.asm.obj: - "$(CC)" -c $* - -LIB=phobos$(MODEL).lib - -targets : $(LIB) - -test : test.exe - -test.obj : test.d - "$(DMD)" -conf= -c -m$(MODEL) test -g $(UDFLAGS) - -test.exe : test.obj $(LIB) - "$(DMD)" -conf= test.obj -m$(MODEL) -g -L/map - -# ti_bit.obj ti_Abit.obj - -SRC= \ - unittest.d \ - index.dd - -# The separation is a workaround for bug 4904 (optlink bug 3372). -SRC_STD_1= \ - std\stdio.d \ - std\string.d \ - std\file.d - -SRC_STD_2a= \ - std\array.d \ - std\functional.d \ - std\path.d \ - std\outbuffer.d \ - std\utf.d - -SRC_STD_3= \ - std\csv.d \ - std\complex.d \ - std\numeric.d \ - std\bigint.d - -SRC_STD_3b= \ - std\base64.d \ - std\ascii.d \ - std\demangle.d \ - std\uri.d \ - std\mmfile.d \ - std\getopt.d - -SRC_STD_3c= \ - std\signals.d \ - std\meta.d \ - std\typetuple.d \ - std\traits.d \ - std\encoding.d \ - std\random.d \ - std\exception.d \ - std\compiler.d \ - std\system.d \ - std\concurrency.d - -SRC_STD_3d= \ - std\bitmanip.d \ - std\typecons.d - -SRC_STD_4= \ - std\int128.d \ - std\uuid.d - -SRC_STD_6a=std\variant.d -SRC_STD_6c=std\zlib.d -SRC_STD_6e=std\socket.d -SRC_STD_6h=std\conv.d -SRC_STD_6i=std\zip.d - -SRC_STD_7= \ - std\stdint.d \ - std\json.d \ - std\parallelism.d \ - std\mathspecial.d \ - std\process.d \ - std\package.d - -SRC_STD_7a= \ - std\sumtype.d - -SRC_STD= \ - $(SRC_STD_1) \ - $(SRC_STD_2a) \ - $(SRC_STD_3) \ - $(SRC_STD_3a) \ - $(SRC_STD_3b) \ - $(SRC_STD_3c) \ - $(SRC_STD_3d) \ - $(SRC_STD_4) \ - $(SRC_STD_6a) \ - $(SRC_STD_6c) \ - $(SRC_STD_6e) \ - $(SRC_STD_6h) \ - $(SRC_STD_6i) \ - $(SRC_STD_7) \ - $(SRC_STD_7a) - -SRC_STD_ALGO_1= \ - std\algorithm\package.d \ - std\algorithm\comparison.d \ - std\algorithm\iteration.d \ - std\algorithm\mutation.d - -SRC_STD_ALGO_2= \ - std\algorithm\searching.d \ - std\algorithm\setops.d - -SRC_STD_ALGO_3= \ - std\algorithm\sorting.d \ - std\algorithm\internal.d - -SRC_STD_ALGO= \ - $(SRC_STD_ALGO_1) \ - $(SRC_STD_ALGO_2) \ - $(SRC_STD_ALGO_3) - -SRC_STD_FORMAT= \ - std\format\package.d \ - std\format\read.d \ - std\format\spec.d \ - std\format\write.d \ - std\format\internal\floats.d \ - std\format\internal\read.d \ - std\format\internal\write.d - -SRC_STD_MATH = \ - std\math\algebraic.d \ - std\math\constants.d \ - std\math\exponential.d \ - std\math\operations.d \ - std\math\hardware.d \ - std\math\package.d \ - std\math\remainder.d \ - std\math\rounding.d \ - std\math\traits.d \ - std\math\trigonometry.d - -SRC_STD_CONTAINER= \ - std\container\array.d \ - std\container\binaryheap.d \ - std\container\dlist.d \ - std\container\rbtree.d \ - std\container\slist.d \ - std\container\util.d \ - std\container\package.d - -SRC_STD_DATETIME= \ - std\datetime\date.d \ - std\datetime\interval.d \ - std\datetime\package.d \ - std\datetime\stopwatch.d \ - std\datetime\systime.d \ - std\datetime\timezone.d - -SRC_STD_DIGEST= \ - std\digest\crc.d \ - std\digest\sha.d \ - std\digest\md.d \ - std\digest\ripemd.d \ - std\digest\hmac.d \ - std\digest\murmurhash.d \ - std\digest\package.d - -SRC_STD_NET= \ - std\net\isemail.d \ - std\net\curl.d - -SRC_STD_RANGE= \ - std\range\package.d \ - std\range\primitives.d \ - std\range\interfaces.d - -SRC_STD_REGEX= \ - std\regex\internal\ir.d \ - std\regex\package.d \ - std\regex\internal\parser.d \ - std\regex\internal\tests.d \ - std\regex\internal\tests2.d \ - std\regex\internal\backtracking.d \ - std\regex\internal\thompson.d \ - std\regex\internal\kickstart.d \ - std\regex\internal\generator.d - -SRC_STD_WIN= \ - std\windows\registry.d \ - std\windows\syserror.d \ - std\windows\charset.d - -SRC_STD_INTERNAL= \ - std\internal\cstring.d \ - std\internal\memory.d \ - std\internal\unicode_tables.d \ - std\internal\unicode_comp.d \ - std\internal\unicode_decomp.d \ - std\internal\unicode_grapheme.d \ - std\internal\unicode_norm.d \ - std\internal\scopebuffer.d \ - std\internal\test\dummyrange.d \ - std\internal\test\range.d - -SRC_STD_INTERNAL_DIGEST= \ - std\internal\digest\sha_SSSE3.d - -SRC_STD_INTERNAL_MATH= \ - std\internal\math\biguintcore.d \ - std\internal\math\biguintnoasm.d \ - std\internal\math\biguintx86.d \ - std\internal\math\gammafunction.d \ - std\internal\math\errorfunction.d - -SRC_STD_INTERNAL_WINDOWS= \ - std\internal\windows\advapi32.d - -SRC_STD_EXP= \ - std\checkedint.d std\experimental\checkedint.d - -SRC_STD_UNI = std\uni\package.d - -SRC_STD_EXP_ALLOC_BB= \ - std\experimental\allocator\building_blocks\affix_allocator.d \ - std\experimental\allocator\building_blocks\aligned_block_list.d \ - std\experimental\allocator\building_blocks\allocator_list.d \ - std\experimental\allocator\building_blocks\ascending_page_allocator.d \ - std\experimental\allocator\building_blocks\bitmapped_block.d \ - std\experimental\allocator\building_blocks\bucketizer.d \ - std\experimental\allocator\building_blocks\fallback_allocator.d \ - std\experimental\allocator\building_blocks\free_list.d \ - std\experimental\allocator\building_blocks\free_tree.d \ - std\experimental\allocator\building_blocks\kernighan_ritchie.d \ - std\experimental\allocator\building_blocks\null_allocator.d \ - std\experimental\allocator\building_blocks\quantizer.d \ - std\experimental\allocator\building_blocks\region.d \ - std\experimental\allocator\building_blocks\scoped_allocator.d \ - std\experimental\allocator\building_blocks\segregator.d \ - std\experimental\allocator\building_blocks\stats_collector.d \ - std\experimental\allocator\building_blocks\package.d - -SRC_STD_EXP_ALLOC= \ - std\experimental\allocator\common.d \ - std\experimental\allocator\gc_allocator.d \ - std\experimental\allocator\mallocator.d \ - std\experimental\allocator\mmap_allocator.d \ - std\experimental\allocator\showcase.d \ - std\experimental\allocator\typed.d \ - std\experimental\allocator\package.d \ - $(SRC_STD_EXP_ALLOC_BB) - -SRC_STD_EXP_LOGGER= \ - std\experimental\logger\core.d \ - std\experimental\logger\filelogger.d \ - std\experimental\logger\multilogger.d \ - std\experimental\logger\nulllogger.d \ - std\experimental\logger\package.d - -SRC_STD_LOGGER= \ - std\logger\core.d \ - std\logger\filelogger.d \ - std\logger\multilogger.d \ - std\logger\nulllogger.d \ - std\logger\package.d - -SRC_ETC= - -SRC_ETC_C= \ - etc\c\zlib.d \ - etc\c\curl.d \ - etc\c\sqlite3.d \ - etc\c\odbc\sql.d \ - etc\c\odbc\sqlext.d \ - etc\c\odbc\sqltypes.d \ - etc\c\odbc\sqlucode.d - -SRC_TO_COMPILE= \ - $(SRC_STD) \ - $(SRC_STD_ALGO) \ - $(SRC_STD_CONTAINER) \ - $(SRC_STD_DATETIME) \ - $(SRC_STD_DIGEST) \ - $(SRC_STD_FORMAT) \ - $(SRC_STD_MATH) \ - $(SRC_STD_NET) \ - $(SRC_STD_RANGE) \ - $(SRC_STD_REGEX) \ - $(SRC_STD_C) \ - $(SRC_STD_WIN) \ - $(SRC_STD_C_WIN) \ - $(SRC_STD_INTERNAL) \ - $(SRC_STD_INTERNAL_DIGEST) \ - $(SRC_STD_INTERNAL_MATH) \ - $(SRC_STD_INTERNAL_WINDOWS) \ - $(SRC_STD_UNI) \ - $(SRC_STD_EXP) \ - $(SRC_STD_EXP_ALLOC) \ - $(SRC_STD_EXP_LOGGER) \ - $(SRC_STD_LOGGER) \ - $(SRC_ETC) \ - $(SRC_ETC_C) - -SRC_ZLIB= \ - etc\c\zlib\crc32.h \ - etc\c\zlib\deflate.h \ - etc\c\zlib\gzguts.h \ - etc\c\zlib\inffixed.h \ - etc\c\zlib\inffast.h \ - etc\c\zlib\inftrees.h \ - etc\c\zlib\inflate.h \ - etc\c\zlib\trees.h \ - etc\c\zlib\zconf.h \ - etc\c\zlib\zlib.h \ - etc\c\zlib\zutil.h \ - etc\c\zlib\adler32.c \ - etc\c\zlib\compress.c \ - etc\c\zlib\crc32.c \ - etc\c\zlib\deflate.c \ - etc\c\zlib\gzclose.c \ - etc\c\zlib\gzlib.c \ - etc\c\zlib\gzread.c \ - etc\c\zlib\gzwrite.c \ - etc\c\zlib\infback.c \ - etc\c\zlib\inffast.c \ - etc\c\zlib\inflate.c \ - etc\c\zlib\inftrees.c \ - etc\c\zlib\trees.c \ - etc\c\zlib\uncompr.c \ - etc\c\zlib\zutil.c - -$(LIB) : $(SRC_TO_COMPILE) \ - $(ZLIB) $(DRUNTIMELIB) win32.mak win64.mak - "$(DMD)" -lib -of$(LIB) -Xfphobos.json $(DFLAGS) $(SRC_TO_COMPILE) \ - $(ZLIB) $(DRUNTIMELIB) - -UNITTEST_OBJS= \ - unittest1.obj \ - unittest2.obj \ - unittest2a.obj \ - unittest3.obj \ - unittest3b.obj \ - unittest3c.obj \ - unittest3d.obj \ - unittest4.obj \ - unittest5a.obj \ - unittest5b.obj \ - unittest5c.obj \ - unittest5d.obj \ - unittest5e.obj \ - unittest6a.obj \ - unittest6c.obj \ - unittest6e.obj \ - unittest6g.obj \ - unittest6h.obj \ - unittest6i.obj \ - unittest7.obj \ - unittest7a.obj \ - unittest8a.obj \ - unittest8b.obj \ - unittest8c.obj \ - unittest8d.obj \ - unittest8e.obj \ - unittest8f.obj \ - unittest9.obj - -unittest : $(LIB) - "$(DMD)" $(UDFLAGS) -c -ofunittest1.obj $(SRC_STD_1) - "$(DMD)" $(UDFLAGS) -c -ofunittest2.obj $(SRC_STD_RANGE) - "$(DMD)" $(UDFLAGS) -c -ofunittest2a.obj $(SRC_STD_2a) - "$(DMD)" $(UDFLAGS) -c -ofunittest3.obj $(SRC_STD_3) - "$(DMD)" $(UDFLAGS) -c -ofunittest3b.obj $(SRC_STD_3b) - "$(DMD)" $(UDFLAGS) -c -ofunittest3c.obj $(SRC_STD_3c) - "$(DMD)" $(UDFLAGS) -c -ofunittest3d.obj $(SRC_STD_3d) $(SRC_STD_DATETIME) - "$(DMD)" $(UDFLAGS) -c -ofunittest4.obj $(SRC_STD_4) $(SRC_STD_DIGEST) - "$(DMD)" $(UDFLAGS) -c -ofunittest5a.obj $(SRC_STD_ALGO_1) - "$(DMD)" $(UDFLAGS) -c -ofunittest5b.obj $(SRC_STD_ALGO_2) - "$(DMD)" $(UDFLAGS) -c -ofunittest5c.obj $(SRC_STD_ALGO_3) - "$(DMD)" $(UDFLAGS) -c -ofunittest5d.obj $(SRC_STD_FORMAT) - "$(DMD)" $(UDFLAGS) -c -ofunittest5e.obj $(SRC_STD_MATH) - "$(DMD)" $(UDFLAGS) -c -ofunittest6a.obj $(SRC_STD_6a) - "$(DMD)" $(UDFLAGS) -c -ofunittest6c.obj $(SRC_STD_6c) - "$(DMD)" $(UDFLAGS) -c -ofunittest6e.obj $(SRC_STD_6e) - "$(DMD)" $(UDFLAGS) -c -ofunittest6g.obj $(SRC_STD_CONTAINER) - "$(DMD)" $(UDFLAGS) -c -ofunittest6h.obj $(SRC_STD_6h) - "$(DMD)" $(UDFLAGS) -c -ofunittest6i.obj $(SRC_STD_6i) - "$(DMD)" $(UDFLAGS) -c -ofunittest7.obj $(SRC_STD_7) $(SRC_STD_LOGGER) - "$(DMD)" $(UDFLAGS) -c -ofunittest7a.obj $(SRC_STD_7a) - "$(DMD)" $(UDFLAGS) -c -ofunittest8a.obj $(SRC_STD_REGEX) - "$(DMD)" $(UDFLAGS) -c -ofunittest8b.obj $(SRC_STD_NET) - "$(DMD)" $(UDFLAGS) -c -ofunittest8c.obj $(SRC_STD_C) $(SRC_STD_WIN) $(SRC_STD_C_WIN) - "$(DMD)" $(UDFLAGS) -c -ofunittest8d.obj $(SRC_STD_INTERNAL) $(SRC_STD_INTERNAL_DIGEST) $(SRC_STD_INTERNAL_MATH) $(SRC_STD_INTERNAL_WINDOWS) - "$(DMD)" $(UDFLAGS) -c -ofunittest8e.obj $(SRC_ETC) $(SRC_ETC_C) - "$(DMD)" $(UDFLAGS) -c -ofunittest8f.obj $(SRC_STD_EXP) - "$(DMD)" $(UDFLAGS) -c -ofunittest9.obj $(SRC_STD_EXP_ALLOC) - "$(DMD)" $(UDFLAGS) unittest.d $(UNITTEST_OBJS) \ - $(ZLIB) $(DRUNTIMELIB) - .\unittest.exe - -#unittest : unittest.exe -# unittest -# -#unittest.exe : unittest.d $(LIB) -# $(DMD) -conf= unittest -g -# dmc unittest.obj -g - -cov : $(SRC_TO_COMPILE) $(LIB) - "$(DMD)" -conf= -m$(MODEL) -cov $(UDFLAGS) -ofcov.exe unittest.d $(SRC_TO_COMPILE) $(LIB) - cov - -###################################################### - -$(ZLIB): $(SRC_ZLIB) - cd etc\c\zlib - "$(MAKE)" -f win64.mak MODEL=$(MODEL) "CC=$(CC)" "AR=$(AR)" zlib$(MODEL).lib - cd ..\..\.. - -###################################################### - -zip: - del phobos.zip - zip32 -r phobos.zip . -x .git\* -x \*.lib -x \*.obj - -phobos.zip : zip - -clean: - cd etc\c\zlib - "$(MAKE)" -f win64.mak MODEL=$(MODEL) clean - cd ..\..\.. - del $(DOCS) - del $(UNITTEST_OBJS) unittest.obj unittest.exe - del $(LIB) - del phobos.json - -install: phobos.zip $(LIB) - copy /y /b $(LIB) $(DIR)\windows\lib - +rd/s/q $(DIR)\src\phobos - unzip -o phobos.zip -d $(DIR)\src\phobos - -auto-tester-build: - echo "Auto-Tester has been disabled" - -JOBS=$(NUMBER_OF_PROCESSORS) -GMAKE=gmake - -auto-tester-test: - echo "Auto-Tester has been disabled"