diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000000..24ed8bf35a --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,38 @@ +name: Main +on: + - pull_request # without merge conflicts + - push # branch or tag + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + main: + strategy: + fail-fast: false + matrix: + os: [ macos-latest, ubuntu-latest, windows-latest ] + dc: [ dmd-latest, ldc-latest ] + name: ${{ matrix.os }}, ${{ matrix.dc }} + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + env: + DMD: ${{ startsWith(matrix.dc, 'ldc') && 'ldmd2' || 'dmd' }} + N: ${{ startsWith(matrix.os, 'macos') && '3' || '2' }} + steps: + - uses: actions/checkout@v4 + - name: Install D compiler + uses: dlang-community/setup-dlang@v1.3.0 + with: + compiler: ${{ matrix.dc }} + - name: Build + shell: bash + run: make -j$N DMD=$DMD + - name: Test + shell: bash + run: make -j$N DMD=$DMD test + - name: 'Windows: Build and test with MODEL=32' + if: runner.os == 'Windows' + shell: bash + run: make -j$N DMD=$DMD MODEL=32 all test diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..eb6317dbc8 --- /dev/null +++ b/Makefile @@ -0,0 +1,142 @@ +DMD_DIR = ../dmd +BUILD = release +DMD = $(DMD_DIR)/generated/$(OS)/$(BUILD)/$(MODEL)/dmd +INSTALL_DIR = ../install +DRUNTIME_PATH = ../dmd/druntime +PHOBOS_PATH = ../phobos +DUB=dub + +WITH_DOC = no +DOC = ../dlang.org + +# Load operating system $(OS) (e.g. linux, osx, ...) and $(MODEL) (e.g. 32, 64) detection Makefile from dmd +$(shell [ ! -d $(DMD_DIR) ] && git clone --depth=1 https://github.com/dlang/dmd $(DMD_DIR)) +include $(DMD_DIR)/compiler/src/osmodel.mak + +ifeq (windows,$(OS)) + DOTEXE:=.exe +else + DOTEXE:= +endif + +# Build folder for all binaries +GENERATED = generated +ROOT = $(GENERATED)/$(OS)/$(MODEL) + +# default to warnings and deprecations as errors, override via e.g. make WARNINGS=-wi +WARNINGS = -w -de +# default flags, override by setting DFLAGS (e.g. make DFLAGS=-O) +DFLAGS = $(MODEL_FLAG) $(if $(findstring windows,$(OS)),,-fPIC) -preview=dip1000 +DFLAGS += $(WARNINGS) + +# Default DUB flags (DUB uses a different architecture format) +DUBFLAGS = --arch=$(subst 32,x86,$(subst 64,x86_64,$(MODEL))) + +TOOLS = \ + $(ROOT)/catdoc$(DOTEXE) \ + $(ROOT)/checkwhitespace$(DOTEXE) \ + $(ROOT)/contributors$(DOTEXE) \ + $(ROOT)/ddemangle$(DOTEXE) \ + $(ROOT)/detab$(DOTEXE) \ + $(ROOT)/rdmd$(DOTEXE) \ + $(ROOT)/tolf$(DOTEXE) \ + $(ROOT)/updatecopyright$(DOTEXE) + +CURL_TOOLS = \ + $(ROOT)/changed$(DOTEXE) \ + $(ROOT)/dget$(DOTEXE) + +DOC_TOOLS = \ + $(ROOT)/dman$(DOTEXE) + +TEST_TOOLS = \ + $(ROOT)/rdmd_test$(DOTEXE) + +all: $(TOOLS) $(CURL_TOOLS) $(ROOT)/dustmite$(DOTEXE) + +rdmd: $(ROOT)/rdmd$(DOTEXE) +ddemangle: $(ROOT)/ddemangle$(DOTEXE) +catdoc: $(ROOT)/catdoc$(DOTEXE) +detab: $(ROOT)/detab$(DOTEXE) +tolf: $(ROOT)/tolf$(DOTEXE) +dget: $(ROOT)/dget$(DOTEXE) +changed: $(ROOT)/changed$(DOTEXE) +dman: $(ROOT)/dman$(DOTEXE) +dustmite: $(ROOT)/dustmite$(DOTEXE) + +$(ROOT)/dustmite$(DOTEXE): DustMite/dustmite.d DustMite/splitter.d DustMite/polyhash.d + $(DMD) $(DFLAGS) -version=Dlang_Tools DustMite/dustmite.d DustMite/splitter.d DustMite/polyhash.d -of$(@) + +$(TOOLS) $(DOC_TOOLS) $(CURL_TOOLS) $(TEST_TOOLS): $(ROOT)/%$(DOTEXE): %.d + $(DMD) $(DFLAGS) -of$(@) $(<) + +d-tags.json: + @echo 'Build d-tags.json and copy it here, e.g. by running:' + @echo " make -C ../dlang.org -f posix.mak d-tags-latest.json && cp ../dlang.org/d-tags-latest.json d-tags.json" + @echo 'or:' + @echo " make -C ../dlang.org -f posix.mak d-tags-prerelease.json && cp ../dlang.org/d-tags-prerelease.json d-tags.json" + @exit 1 + +$(ROOT)/dman$(DOTEXE): d-tags.json +$(ROOT)/dman$(DOTEXE): override DFLAGS += -J. + +install: $(TOOLS) $(CURL_TOOLS) $(ROOT)/dustmite$(DOTEXE) + mkdir -p $(INSTALL_DIR)/bin + cp $^ $(INSTALL_DIR)/bin + +clean: + rm -rf $(GENERATED) + +$(ROOT)/tests_extractor$(DOTEXE): tests_extractor.d + mkdir -p $(ROOT) + DFLAGS="$(DFLAGS)" $(DUB) build \ + --single $< --force --compiler=$(DMD) $(DUBFLAGS) \ + && mv ./tests_extractor$(DOTEXE) $@ + +################################################################################ +# Build & run tests +################################################################################ + +ifeq (windows,$(OS)) + # for some reason, --strip-trailing-cr isn't enough - need to dos2unix stdin + DIFF := dos2unix | diff --strip-trailing-cr +else + DIFF := diff +endif + +test_tests_extractor: $(ROOT)/tests_extractor$(DOTEXE) + for file in ascii iteration ; do \ + $< -i "./test/tests_extractor/$${file}.d" | $(DIFF) -u -p - "./test/tests_extractor/$${file}.d.ext"; \ + done + $< -a betterc -i "./test/tests_extractor/attributes.d" | $(DIFF) -u -p - "./test/tests_extractor/attributes.d.ext"; + $< --betterC -i "./test/tests_extractor/betterc.d" | $(DIFF) -u -p - "./test/tests_extractor/betterc.d.ext"; + +RDMD_TEST_COMPILERS = $(DMD) +RDMD_TEST_EXECUTABLE = $(ROOT)/rdmd$(DOTEXE) +RDMD_TEST_DEFAULT_COMPILER = $(basename $(DMD)) + +VERBOSE_RDMD_TEST=0 +ifeq ($(VERBOSE_RDMD_TEST), 1) + override VERBOSE_RDMD_TEST_FLAGS:=-v +endif + +ifeq (osx,$(OS)) +# /tmp is a symlink on Mac, and rdmd_test.d doesn't like it +test_rdmd: export TMPDIR=$(shell cd /tmp && pwd -P) +endif +test_rdmd: $(ROOT)/rdmd_test$(DOTEXE) $(RDMD_TEST_EXECUTABLE) + $< $(RDMD_TEST_EXECUTABLE) $(MODEL_FLAG) \ + --rdmd-default-compiler=$(RDMD_TEST_DEFAULT_COMPILER) \ + --test-compilers=$(RDMD_TEST_COMPILERS) \ + $(VERBOSE_RDMD_TEST_FLAGS) + $(DMD) $(DFLAGS) -unittest -main -run rdmd.d + +test: test_tests_extractor test_rdmd + +ifeq ($(WITH_DOC),yes) +all install: $(DOC_TOOLS) +endif + +.PHONY: all install clean + +.DELETE_ON_ERROR: # GNU Make directive (delete output files on error) diff --git a/README.md b/README.md index c1db180069..7add635fbc 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Building On a Posix system all tools can be built with: ``` -make -f posix.mak all +make all ``` Using DUB as a build tool diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 35aa457fc9..0000000000 --- a/appveyor.yml +++ /dev/null @@ -1,71 +0,0 @@ -platform: x64 -environment: - matrix: - - DC: dmd - DVersion: nightly - arch: x64 - MODEL: 64 - - DC: dmd - DVersion: nightly - arch: x86 - MODEL: 32 -skip_tags: false -build_script: - - ps: > - function ResolveLatestDMD - { - $version = $env:DVersion; - if($version -eq "stable") { - $latest = (Invoke-WebRequest "https://downloads.dlang.org/releases/LATEST").toString(); - $url = "https://downloads.dlang.org/releases/2.x/$($latest)/dmd.$($latest).windows.7z"; - }elseif($version -eq "beta") { - $latest = (Invoke-WebRequest "https://downloads.dlang.org/pre-releases/LATEST").toString(); - $latestVersion = $latest.split("-")[0].split("~")[0]; - $url = "https://downloads.dlang.org/pre-releases/2.x/$($latestVersion)/dmd.$($latest).windows.7z"; - }elseif($version -eq "nightly") { - $latest = (Invoke-WebRequest "https://downloads.dlang.org/nightlies/dmd-master/LATEST").toString().replace("`n","").replace("`r",""); - $url = "https://downloads.dlang.org/nightlies/dmd-$($latest)/dmd.master.windows.7z" - }else { - $url = "https://downloads.dlang.org/releases/2.x/$($version)/dmd.$($version).windows.7z"; - } - $env:PATH += ";C:\dmd2\windows\bin;"; - return $url; - } - function SetUpDCompiler - { - $env:toolchain = "msvc"; - echo "downloading ..."; - $url = ResolveLatestDMD; - echo $url; - Invoke-WebRequest $url -OutFile "c:\dmd.7z"; - echo "finished."; - pushd c:\\; - 7z x dmd.7z > $null; - popd; - } - SetUpDCompiler - - if($env:arch -eq "x86"){ - $env:compilersetupargs = "x86"; - $env:Darch = "x86"; - $env:DConf = "m32"; - }elseif($env:arch -eq "x64"){ - $env:compilersetupargs = "amd64"; - $env:Darch = "x86_64"; - $env:DConf = "m64"; - } - # This needs to be done more generically (currently only works on AppVeyor) - $env:compilersetup = "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall"; - - - call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %compilersetupargs% - -test_script: - - echo %PLATFORM% - - echo %Darch% - - echo %DC% - - echo %PATH% - - '%DC% --version' - - make -f win32.mak DFLAGS=-g rdmd dustmite ddemangle changed - - make -f win32.mak DFLAGS=-g test - - make -f win64.mak DFLAGS=-g rdmd dustmite ddemangle changed - - make -f win64.mak DFLAGS=-g test diff --git a/posix.mak b/posix.mak index e0c0bbdb02..bc94e485f0 100644 --- a/posix.mak +++ b/posix.mak @@ -1,141 +1,11 @@ -DMD_DIR = ../dmd -BUILD = release -DMD = $(DMD_DIR)/generated/$(OS)/$(BUILD)/$(MODEL)/dmd -CC = gcc -INSTALL_DIR = ../install -DRUNTIME_PATH = ../dmd/druntime -PHOBOS_PATH = ../phobos -DUB=dub +$(warning ===== DEPRECATION NOTICE ===== ) +$(warning ===== DEPRECATION: posix.mak is deprecated. Please use generic Makefile instead.) +$(warning ============================== ) -WITH_DOC = no -DOC = ../dlang.org +# forward everything to Makefile -# Load operating system $(OS) (e.g. linux, osx, ...) and $(MODEL) (e.g. 32, 64) detection Makefile from dmd -$(shell [ ! -d $(DMD_DIR) ] && git clone --depth=1 https://github.com/dlang/dmd $(DMD_DIR)) -include $(DMD_DIR)/src/osmodel.mak +all: + $(MAKE) -f Makefile $@ -# Build folder for all binaries -GENERATED = generated -ROOT = $(GENERATED)/$(OS)/$(MODEL) - -# Set DRUNTIME name and full path -ifeq (,$(findstring win,$(OS))) - DRUNTIME = $(DRUNTIME_PATH)/lib/libdruntime-$(OS)$(MODEL).a - DRUNTIMESO = $(DRUNTIME_PATH)/lib/libdruntime-$(OS)$(MODEL)so.a -else - DRUNTIME = $(DRUNTIME_PATH)/lib/druntime.lib -endif - -# Set PHOBOS name and full path -ifeq (,$(findstring win,$(OS))) - PHOBOS = $(PHOBOS_PATH)/generated/$(OS)/$(BUILD)/$(MODEL)/libphobos2.a - PHOBOSSO = $(PHOBOS_PATH)/generated/$(OS)/$(BUILD)/$(MODEL)/libphobos2.so -endif - -# default to warnings and deprecations as errors, override via e.g. make -f posix.mak WARNINGS=-wi -WARNINGS = -w -de -# default include/link paths, override by setting DFLAGS (e.g. make -f posix.mak DFLAGS=-I/foo) -DFLAGS = -I$(DRUNTIME_PATH)/import -I$(PHOBOS_PATH) \ - -L-L$(PHOBOS_PATH)/generated/$(OS)/$(BUILD)/$(MODEL) $(MODEL_FLAG) -fPIC -preview=dip1000 -DFLAGS += $(WARNINGS) - -# Default DUB flags (DUB uses a different architecture format) -DUBFLAGS = --arch=$(subst 32,x86,$(subst 64,x86_64,$(MODEL))) - -TOOLS = \ - $(ROOT)/catdoc \ - $(ROOT)/checkwhitespace \ - $(ROOT)/contributors \ - $(ROOT)/ddemangle \ - $(ROOT)/detab \ - $(ROOT)/rdmd \ - $(ROOT)/tolf \ - $(ROOT)/updatecopyright - -CURL_TOOLS = \ - $(ROOT)/changed \ - $(ROOT)/dget - -DOC_TOOLS = \ - $(ROOT)/dman - -TEST_TOOLS = \ - $(ROOT)/rdmd_test - -all: $(TOOLS) $(CURL_TOOLS) $(ROOT)/dustmite - -rdmd: $(ROOT)/rdmd -ddemangle: $(ROOT)/ddemangle -catdoc: $(ROOT)/catdoc -detab: $(ROOT)/detab -tolf: $(ROOT)/tolf -dget: $(ROOT)/dget -changed: $(ROOT)/changed -dman: $(ROOT)/dman -dustmite: $(ROOT)/dustmite - -$(ROOT)/dustmite: DustMite/dustmite.d DustMite/splitter.d DustMite/polyhash.d - $(DMD) $(DFLAGS) -version=Dlang_Tools DustMite/dustmite.d DustMite/splitter.d DustMite/polyhash.d -of$(@) - -$(TOOLS) $(DOC_TOOLS) $(CURL_TOOLS) $(TEST_TOOLS): $(ROOT)/%: %.d - $(DMD) $(DFLAGS) -of$(@) $(<) - -d-tags.json: - @echo 'Build d-tags.json and copy it here, e.g. by running:' - @echo " make -C ../dlang.org -f posix.mak d-tags-latest.json && cp ../dlang.org/d-tags-latest.json d-tags.json" - @echo 'or:' - @echo " make -C ../dlang.org -f posix.mak d-tags-prerelease.json && cp ../dlang.org/d-tags-prerelease.json d-tags.json" - @exit 1 - -$(ROOT)/dman: d-tags.json -$(ROOT)/dman: override DFLAGS += -J. - -install: $(TOOLS) $(CURL_TOOLS) $(ROOT)/dustmite - mkdir -p $(INSTALL_DIR)/bin - cp $^ $(INSTALL_DIR)/bin - -clean: - rm -rf $(GENERATED) - -$(ROOT)/tests_extractor: tests_extractor.d - mkdir -p $(ROOT) - DFLAGS="$(DFLAGS)" $(DUB) build \ - --single $< --force --compiler=$(DMD) $(DUBFLAGS) \ - && mv ./tests_extractor $@ - -################################################################################ -# Build & run tests -################################################################################ - -test_tests_extractor: $(ROOT)/tests_extractor - for file in ascii iteration ; do \ - $< -i "./test/tests_extractor/$${file}.d" | diff -p - "./test/tests_extractor/$${file}.d.ext"; \ - done - $< -a betterc -i "./test/tests_extractor/attributes.d" | diff -p - "./test/tests_extractor/attributes.d.ext"; - $< --betterC -i "./test/tests_extractor/betterc.d" | diff -p - "./test/tests_extractor/betterc.d.ext"; - -RDMD_TEST_COMPILERS = $(DMD) -RDMD_TEST_EXECUTABLE = $(ROOT)/rdmd -RDMD_TEST_DEFAULT_COMPILER = $(basename $(DMD)) - -VERBOSE_RDMD_TEST=0 -ifeq ($(VERBOSE_RDMD_TEST), 1) - override VERBOSE_RDMD_TEST_FLAGS:=-v -endif - -test_rdmd: $(ROOT)/rdmd_test $(RDMD_TEST_EXECUTABLE) - $< $(RDMD_TEST_EXECUTABLE) -m$(MODEL) \ - --rdmd-default-compiler=$(RDMD_TEST_DEFAULT_COMPILER) \ - --test-compilers=$(RDMD_TEST_COMPILERS) \ - $(VERBOSE_RDMD_TEST_FLAGS) - $(DMD) $(DFLAGS) -unittest -main -run rdmd.d - -test: test_tests_extractor test_rdmd - -ifeq ($(WITH_DOC),yes) -all install: $(DOC_TOOLS) -endif - -.PHONY: all install clean - -.DELETE_ON_ERROR: # GNU Make directive (delete output files on error) +%: + $(MAKE) -f Makefile $@ diff --git a/rdmd_test.d b/rdmd_test.d index 706538bb3a..881569887f 100755 --- a/rdmd_test.d +++ b/rdmd_test.d @@ -431,7 +431,7 @@ void runTests(string rdmdApp, string compiler, string model) res = execute(rdmdArgs ~ [forceSrc.baseName()]); enforce(res.status == 0, res.output); - enforce(!res.output.canFind("compile_force_src")); + enforce(!res.output.canFind("compile_force_src"), res.output); } auto conflictDir = forceSrc.setExtension(".dir"); @@ -684,11 +684,11 @@ void runFallbackTest(string rdmdApp, string buildCompiler, string model) if an explicit --compiler flag is not provided, rdmd should search its own binary path first when looking for the default compiler (determined by the compiler used to build it) */ - string localDMD = buildPath(tempDir(), baseName(buildCompiler).setExtension(binExt)); + string localDMD = buildPath(dirName(rdmdApp), baseName(buildCompiler).setExtension(binExt)); std.file.write(localDMD, ""); // An empty file avoids the "Not a valid 16-bit application" pop-up on Windows scope(exit) std.file.remove(localDMD); auto res = execute(rdmdApp ~ [modelSwitch(model), "--force", "--chatty", "--eval=writeln(`Compiler found.`);"]); enforce(res.status == 1, res.output); - enforce(res.output.canFind(format(`spawn [%(%s%),`, localDMD.only)), localDMD ~ " would not have been executed"); + enforce(res.output.canFind(format(`spawn [%(%s%),`, localDMD.only)), localDMD ~ " would not have been executed. Output:\n" ~ res.output); } diff --git a/win32.mak b/win32.mak deleted file mode 100644 index 82849bb89f..0000000000 --- a/win32.mak +++ /dev/null @@ -1,108 +0,0 @@ -# Where scp command copies to -SCPDIR=..\backup - -##### Tools - -# D compiler -DMD=dmd -# C++ compiler -CC=dmc -# Make program -MAKE=make -# Librarian -LIB=lib -# Delete file(s) -DEL=del -# Make directory -MD=mkdir -# Remove directory -RD=rmdir -# File copy -CP=cp -# De-tabify -DETAB=detab -# Convert line endings to Unix -TOLF=tolf -# Zip -ZIP=zip32 -# Copy to another directory -SCP=$(CP) - -DFLAGS=-O -release -m$(MODEL) - -GENERATED = generated -ROOT = $(GENERATED)\windows\32 - -TARGETS= $(ROOT)\dman.exe \ - $(ROOT)\rdmd.exe \ - $(ROOT)\ddemangle.exe \ - $(ROOT)\changed.exe \ - $(ROOT)\dustmite.exe - -MAKEFILES=win32.mak win64.mak posix.mak - -SRCS=dman.d rdmd.d ddemangle.d - -targets : $(TARGETS) - -dman: $(ROOT)\dman.exe -rdmd: $(ROOT)\rdmd.exe -ddemangle: $(ROOT)\ddemangle.exe -changed: $(ROOT)\changed.exe -dustmite: $(ROOT)\dustmite.exe - -d-tags.json : - @echo 'Build d-tags.json and copy it here, e.g. by running:' - @echo " make -C ../dlang.org -f win32.mak d-tags.json && copy ../dlang.org/d-tags-latest.json d-tags.json" - @exit - -$(ROOT)\dman.exe : dman.d d-tags.json - $(DMD) $(DFLAGS) -of$@ dman.d -J. - -$(ROOT)\rdmd.exe : rdmd.d - $(DMD) $(DFLAGS) -of$@ rdmd.d advapi32.lib - -$(ROOT)\ddemangle.exe : ddemangle.d - $(DMD) $(DFLAGS) -of$@ ddemangle.d - -$(ROOT)\dustmite.exe : DustMite/dustmite.d DustMite/splitter.d DustMite/polyhash.d - $(DMD) $(DFLAGS) -of$@ -version=Dlang_Tools DustMite/dustmite.d DustMite/splitter.d DustMite/polyhash.d - -$(ROOT)\changed.exe : changed.d - $(DMD) $(DFLAGS) -of$@ changed.d - -clean : - rmdir /s /q $(GENERATED) - -detab: - $(DETAB) $(SRCS) - -tolf: - $(TOLF) $(SRCS) $(MAKEFILES) - -zip: detab tolf $(MAKEFILES) - $(DEL) dman.zip - $(ZIP) dman $(MAKEFILES) $(SRCS) $(TAGS) - -scp: detab tolf $(MAKEFILES) - $(SCP) $(SRCS) $(MAKEFILES) $(SCPDIR) - - -################################################################################ -# Build and run tests -################################################################################ - -RDMD_TEST_COMPILERS = $(DMD) -RDMD_TEST_EXECUTABLE = $(ROOT)\rdmd.exe -RDMD_TEST_DEFAULT_COMPILER = $(DMD) - -$(ROOT)\rdmd_test.exe : rdmd_test.d - $(DMD) $(DFLAGS) -of$@ rdmd_test.d - -test_rdmd : $(ROOT)\rdmd_test.exe $(RDMD_TEST_EXECUTABLE) - $(ROOT)\rdmd_test.exe \ - $(RDMD_TEST_EXECUTABLE) -m$(MODEL) -v \ - --rdmd-default-compiler=$(RDMD_TEST_DEFAULT_COMPILER) \ - --test-compilers=$(RDMD_TEST_COMPILERS) - -test : test_rdmd diff --git a/win64.mak b/win64.mak deleted file mode 100644 index e1ff05cbb9..0000000000 --- a/win64.mak +++ /dev/null @@ -1,64 +0,0 @@ -ROOT = generated\windows\64 - -TARGETS= $(ROOT)\dman.exe \ - $(ROOT)\rdmd.exe \ - $(ROOT)\ddemangle.exe \ - $(ROOT)\changed.exe \ - $(ROOT)\dustmite.exe - -targets : $(TARGETS) - -dman: $(ROOT)\dman.exe -rdmd: $(ROOT)\rdmd.exe -ddemangle: $(ROOT)\ddemangle.exe -changed: $(ROOT)\changed.exe -dustmite: $(ROOT)\dustmite.exe - -d-tags.json : - @echo 'Build d-tags.json and copy it here, e.g. by running:' - @echo " make -C ../dlang.org -f win64.mak d-tags.json && copy ../dlang.org/d-tags-latest.json d-tags.json" - @exit - -MAKE_WIN32=make -f win32.mak "ROOT=$(ROOT)" "MODEL=$(MODEL)" - -$(ROOT)\dman.exe : dman.d d-tags.json - $(MAKE_WIN32) $@ - -$(ROOT)\rdmd.exe : rdmd.d - $(MAKE_WIN32) $@ - -$(ROOT)\ddemangle.exe : ddemangle.d - $(MAKE_WIN32) $@ - -$(ROOT)\dustmite.exe : DustMite/dustmite.d DustMite/splitter.d DustMite/polyhash.d - $(MAKE_WIN32) $@ - -$(ROOT)\changed.exe : changed.d - $(MAKE_WIN32) $@ - -clean : - $(MAKE_WIN32) $@ - -detab: - $(MAKE_WIN32) $@ - -tolf: - $(MAKE_WIN32) $@ - -zip: detab tolf $(MAKEFILES) - $(MAKE_WIN32) $@ - -scp: detab tolf $(MAKEFILES) - $(MAKE_WIN32) $@ - - -################################################################################ -# Build and run tests -################################################################################ -$(ROOT)\rdmd_test.exe : rdmd_test.d - $(MAKE_WIN32) $@ - -test_rdmd : $(ROOT)\rdmd_test.exe $(RDMD_TEST_EXECUTABLE) - $(MAKE_WIN32) $@ - -test : test_rdmd