@@ -145,7 +145,7 @@ php_bison(foo foo.y foo.c OPTIONS -Wall --debug)
145145# bison -Wall --debug foo.y --output foo.c
146146```
147147
148- ### Specifying options
148+ ### Example: Specifying options
149149
150150This module provides some default options when using the `ADD_DEFAULT_OPTIONS`:
151151
@@ -227,7 +227,16 @@ _php_bison_config()
227227
228228include_guard (GLOBAL )
229229
230+ include (ExternalProject)
230231include (FeatureSummary)
232+ include (FetchContent)
233+
234+ set_package_properties(
235+ BISON
236+ PROPERTIES
237+ URL "https://www.gnu.org/software/bison/"
238+ DESCRIPTION "General-purpose parser generator"
239+ )
231240
232241# Configuration after find_package() in this module.
233242macro (_php_bison_config_options)
@@ -655,8 +664,8 @@ function(_php_bison_download)
655664 )
656665
657666 # Target created by ExternalProject:
658- if (TARGET bison )
659- add_dependencies (Bison::Bison bison )
667+ if (TARGET BISON- install )
668+ add_dependencies (Bison::Bison BISON- install )
660669 endif ()
661670
662671 # Move dependency to PACKAGES_FOUND.
@@ -676,22 +685,35 @@ function(_php_bison_download)
676685 _PHP_BISON_DOWNLOAD
677686 TRUE
678687 CACHE INTERNAL
679- "Internal marker whether the Bison will be downloaded."
688+ "Internal marker whether Bison is downloaded."
680689 )
681690
682691 return (PROPAGATE BISON_FOUND BISON_VERSION)
683692endfunction ()
684693
685694# Downloads GNU Bison.
686695function (_php_bison_download_gnu)
687- message (STATUS "GNU Bison ${BISON_VERSION} will be downloaded at build phase" )
688-
689- include (ExternalProject)
696+ message (
697+ STATUS
698+ "Downloading GNU Bison ${BISON_VERSION} from https://ftp.gnu.org/gnu/bison"
699+ )
690700
691- ExternalProject_Add (
692- bison
701+ FetchContent_Declare (
702+ BISON
693703 URL https://ftp.gnu.org/gnu/bison/bison-${BISON_VERSION} .tar.gz
704+ SOURCE_SUBDIR non-existing
694705 DOWNLOAD_EXTRACT_TIMESTAMP TRUE
706+ OVERRIDE_FIND_PACKAGE
707+ )
708+
709+ FetchContent_MakeAvailable(BISON)
710+
711+ ExternalProject_Add(
712+ BISON
713+ STEP_TARGETS build install
714+ SOURCE_DIR ${bison_SOURCE_DIR}
715+ BINARY_DIR ${bison_BINARY_DIR}
716+ INSTALL_DIR ${FETCHCONTENT_BASE_DIR} /bison-install
695717 CONFIGURE_COMMAND
696718 <SOURCE_DIR>/configure
697719 --disable-dependency-tracking
@@ -701,37 +723,32 @@ function(_php_bison_download_gnu)
701723 LOG_INSTALL TRUE
702724 )
703725
704- ExternalProject_Get_Property(bison INSTALL_DIR)
726+ ExternalProject_Get_Property(BISON INSTALL_DIR)
705727
706728 set_property (CACHE BISON_EXECUTABLE PROPERTY VALUE ${INSTALL_DIR} /bin/bison)
707729endfunction ()
708730
709- # Downloads https://github.com/lexxmark/ winflexbison.
731+ # Downloads winflexbison.
710732function (_php_bison_download_windows)
711733 message (
712734 STATUS
713- "Downloading win_bison ${BISON_VERSION} (${PHP_BISON_WIN_VERSION_DOWNLOAD} )"
735+ "Downloading win_bison ${BISON_VERSION} from "
736+ "https://github.com/lexxmark/winflexbison "
737+ "(${PHP_BISON_WIN_VERSION_DOWNLOAD} )"
714738 )
715739
716- get_directory_property (dir EP_BASE)
717- if (NOT dir)
718- set (dir "${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles" )
719- endif ()
720-
721- set (file "${dir} /win_flex_bison.zip" )
722-
723- file (
724- DOWNLOAD
725- "https://github.com/lexxmark/winflexbison/releases/download/v${PHP_BISON_WIN_VERSION_DOWNLOAD} /win_flex_bison-${PHP_BISON_WIN_VERSION_DOWNLOAD} .zip"
726- ${file}
727- SHOW_PROGRESS
740+ FetchContent_Declare(
741+ BISON
742+ URL https://github.com/lexxmark/winflexbison/releases/download/v${PHP_BISON_WIN_VERSION_DOWNLOAD} /win_flex_bison-${PHP_BISON_WIN_VERSION_DOWNLOAD} .zip
743+ SOURCE_SUBDIR non-existing
744+ OVERRIDE_FIND_PACKAGE
728745 )
729746
730- file (ARCHIVE_EXTRACT INPUT " ${file} " DESTINATION " ${dir} /win_flex_bison" )
747+ FetchContent_MakeAvailable(BISON )
731748
732749 set_property (
733750 CACHE
734751 BISON_EXECUTABLE
735- PROPERTY VALUE "${dir} /win_flex_bison /win_bison.exe"
752+ PROPERTY VALUE "${bison_SOURCE_DIR} /win_bison.exe"
736753 )
737754endfunction ()
0 commit comments