Skip to content

Commit c181a78

Browse files
committed
[build] web: When prebuilt files are available only build web if source files changed
1 parent 4500251 commit c181a78

File tree

3 files changed

+266
-187
lines changed

3 files changed

+266
-187
lines changed

configure.ac

Lines changed: 232 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,9 +352,9 @@ AC_ARG_WITH([prebuilt-webinterface],
352352
)],
353353
[[with_prebuilt_webinterface=]])
354354
if test "x$with_prebuilt_webinterface" = "xyes"; then
355-
BUILD_WEBINTERFACE=
355+
BUILD_WEBINTERFACE=
356356
else
357-
BUILD_WEBINTERFACE=true
357+
BUILD_WEBINTERFACE=true
358358
fi
359359
AC_SUBST([BUILD_WEBINTERFACE])
360360

@@ -414,4 +414,234 @@ AC_CONFIG_FILES([
414414
Makefile
415415
owntone.spec
416416
])
417+
418+
WEBSRC_SUBDIRS="\
419+
public \
420+
src \
421+
src/components \
422+
src/filter \
423+
src/i18n \
424+
src/lib \
425+
src/pages \
426+
src/router \
427+
src/stores \
428+
src/templates \
429+
src/webapi"
430+
AC_SUBST([WEBSRC_SUBDIRS])
431+
432+
WEBSRC_SOURCE_FILES="\
433+
public/android-chrome-512x512.png \
434+
public/mstile-150x150.png \
435+
public/browserconfig.xml \
436+
public/site.webmanifest \
437+
public/favicon.ico \
438+
public/android-chrome-192x192.png \
439+
public/safari-pinned-tab.svg \
440+
public/apple-touch-icon.png \
441+
public/favicon-16x16.png \
442+
public/logo.svg \
443+
public/favicon-32x32.png \
444+
src/components/ModalDialogAddRss.vue \
445+
src/components/ModalDialogPlaylistSpotify.vue \
446+
src/components/ListPlaylistsSpotify.vue \
447+
src/components/ListArtistsSpotify.vue \
448+
src/components/ModalDialogComposer.vue \
449+
src/components/ListArtists.vue \
450+
src/components/ControlSlider.vue \
451+
src/components/ModalDialogArtist.vue \
452+
src/components/ListPlaylists.vue \
453+
src/components/ModalDialogArtistSpotify.vue \
454+
src/components/ModalDialogPlaylistSave.vue \
455+
src/components/ModalDialogGenre.vue \
456+
src/components/ModalDialogTrackSpotify.vue \
457+
src/components/ListTracks.vue \
458+
src/components/ListGenres.vue \
459+
src/components/ModalDialogAlbumSpotify.vue \
460+
src/components/TabsAudiobooks.vue \
461+
src/components/IndexButtonList.vue \
462+
src/components/TabsSettings.vue \
463+
src/components/ModalDialogAddUrlStream.vue \
464+
src/components/ModalDialogDirectory.vue \
465+
src/components/ListComposers.vue \
466+
src/components/CoverArtwork.vue \
467+
src/components/NavbarItemOutput.vue \
468+
src/components/ModalDialogAlbum.vue \
469+
src/components/ControlDropdown.vue \
470+
src/components/ModalDialogPlaylist.vue \
471+
src/components/ListDirectories.vue \
472+
src/components/ModalDialog.vue \
473+
src/components/ListAlbums.vue \
474+
src/components/ListAlbumsSpotify.vue \
475+
src/components/ListItemQueueItem.vue \
476+
src/components/ListTracksSpotify.vue \
477+
src/components/LyricsPane.vue \
478+
src/components/ModalDialogQueueItem.vue \
479+
src/components/ModalDialogRemotePairing.vue \
480+
src/components/ModalDialogTrack.vue \
481+
src/components/ModalDialogUpdate.vue \
482+
src/components/NavbarBottom.vue \
483+
src/components/NavbarItemLink.vue \
484+
src/components/NavbarTop.vue \
485+
src/components/NotificationList.vue \
486+
src/components/PlayerButtonConsume.vue \
487+
src/components/PlayerButtonLyrics.vue \
488+
src/components/PlayerButtonNext.vue \
489+
src/components/PlayerButtonPlayPause.vue \
490+
src/components/PlayerButtonPrevious.vue \
491+
src/components/PlayerButtonRepeat.vue \
492+
src/components/PlayerButtonSeekBack.vue \
493+
src/components/PlayerButtonSeekForward.vue \
494+
src/components/PlayerButtonShuffle.vue \
495+
src/components/SettingsCheckbox.vue \
496+
src/components/SettingsIntfield.vue \
497+
src/components/SettingsTextfield.vue \
498+
src/components/TabsMusic.vue \
499+
src/components/TabsSearch.vue \
500+
src/filter/index.js \
501+
src/i18n/index.js \
502+
src/i18n/de.json \
503+
src/i18n/en.json \
504+
src/i18n/fr.json \
505+
src/i18n/zh-CN.json \
506+
src/i18n/zh-TW.json \
507+
src/lib/Audio.js \
508+
src/lib/SVGRenderer.js \
509+
src/lib/GroupedList.js \
510+
src/pages/PageMusicRecentlyPlayed.vue \
511+
src/pages/PageMusicSpotifyFeaturedPlaylists.vue \
512+
src/pages/PageAudiobooksArtists.vue \
513+
src/pages/PageAudiobooksGenres.vue \
514+
src/pages/PageAlbum.vue \
515+
src/pages/PageComposerAlbums.vue \
516+
src/pages/PageMusicSpotify.vue \
517+
src/pages/PagePlaylistTracks.vue \
518+
src/pages/PagePodcast.vue \
519+
src/pages/PageMusicSpotifyNewReleases.vue \
520+
src/pages/PageRadioStreams.vue \
521+
src/pages/PageAudiobooksAlbums.vue \
522+
src/pages/PageComposers.vue \
523+
src/pages/PageAudiobooksArtist.vue \
524+
src/pages/PageGenres.vue \
525+
src/pages/PageMusic.vue \
526+
src/pages/PageGenreAlbums.vue \
527+
src/pages/PageAbout.vue \
528+
src/pages/PageAlbumSpotify.vue \
529+
src/pages/PageAlbums.vue \
530+
src/pages/PageArtist.vue \
531+
src/pages/PageArtistSpotify.vue \
532+
src/pages/PageArtistTracks.vue \
533+
src/pages/PageArtists.vue \
534+
src/pages/PageComposerTracks.vue \
535+
src/pages/PageFiles.vue \
536+
src/pages/PageGenreTracks.vue \
537+
src/pages/PageMusicRecentlyAdded.vue \
538+
src/pages/PagePlaylistFolder.vue \
539+
src/pages/PagePlaylistTracksSpotify.vue \
540+
src/pages/PagePodcasts.vue \
541+
src/pages/PageQueue.vue \
542+
src/pages/PageSearchLibrary.vue \
543+
src/pages/PageSearchSpotify.vue \
544+
src/pages/PageSettingsOnlineServices.vue \
545+
src/pages/PageSettingsRemotesOutputs.vue \
546+
src/pages/PageAudiobooksAlbum.vue \
547+
src/pages/PageNowPlaying.vue \
548+
src/pages/PageSettingsArtwork.vue \
549+
src/pages/PageSettingsWebinterface.vue \
550+
src/router/index.js \
551+
src/stores/configuration.js \
552+
src/stores/library.js \
553+
src/stores/lyrics.js \
554+
src/stores/notifications.js \
555+
src/stores/outputs.js \
556+
src/stores/player.js \
557+
src/stores/queue.js \
558+
src/stores/remotes.js \
559+
src/stores/search.js \
560+
src/stores/services.js \
561+
src/stores/settings.js \
562+
src/stores/ui.js \
563+
src/templates/ContentWithHeading.vue \
564+
src/templates/ContentWithHero.vue \
565+
src/webapi/index.js \
566+
src/App.vue \
567+
src/icons.js \
568+
src/main.js \
569+
src/mystyles.scss \
570+
.prettierrc.json \
571+
eslint.config.js \
572+
index.html \
573+
jsconfig.json \
574+
package-lock.json \
575+
package.json \
576+
vite.config.js"
577+
AC_SUBST([WEBSRC_SOURCE_FILES])
578+
579+
AC_CONFIG_COMMANDS([web-src],
580+
[
581+
if test "x$enable_webinterface" = "xyes"; then
582+
websrc_builddir="$ac_abs_builddir/web-src"
583+
websrc_srcdir="$ac_abs_srcdir/web-src"
584+
if test "$websrc_srcdir" != "$websrc_builddir"; then
585+
echo "web-src: out-of-tree build, copy web-src to build dir ($websrc_srcdir = $websrc_builddir)"
586+
for dir in $dirs; do
587+
mkdir -p "$websrc_builddir/$dir"
588+
echo "web-src: created dir $websrc_builddir/$dir"
589+
done
590+
for file in $files; do
591+
cp "$websrc_srcdir/$file" "$websrc_builddir/$file"
592+
echo "web-src: copied $file from '$websrc_srcdir' to '$websrc_builddir'"
593+
done
594+
else
595+
echo "web-src: in-tree build, nothing to prepare ($websrc_srcdir = $websrc_builddir)"
596+
fi
597+
fi
598+
], [
599+
dirs="$WEBSRC_SUBDIRS"
600+
files="$WEBSRC_SOURCE_FILES"
601+
enable_webinterface="$enable_webinterface"
602+
])
603+
604+
HTDOCS_FILES="\
605+
index.html \
606+
android-chrome-192x192.png \
607+
android-chrome-512x512.png \
608+
apple-touch-icon.png \
609+
browserconfig.xml \
610+
favicon.ico \
611+
favicon-16x16.png \
612+
favicon-32x32.png \
613+
mstile-150x150.png \
614+
safari-pinned-tab.svg \
615+
site.webmanifest \
616+
assets/index.css \
617+
assets/index.js"
618+
AC_SUBST([WEBSRC_BUILD_FILES])
619+
620+
AC_CONFIG_COMMANDS([htdocs],
621+
[
622+
if test "x$enable_webinterface" = "xyes"; then
623+
websrc_builddir="$ac_abs_builddir/web-src/htdocs"
624+
websrc_srcdir="$ac_abs_srcdir/web-src/htdocs"
625+
if test "$websrc_srcdir" != "$websrc_builddir"; then
626+
echo "htdocs: out-of-tree build, copy prebuilt htdocs to build dir ($websrc_srcdir = $websrc_builddir)"
627+
if test -d "$websrc_srcdir/htdocs"; then
628+
mkdir -p "$websrc_builddir"
629+
mkdir -p "$websrc_builddir/assets"
630+
for file in $files; do
631+
cp "$websrc_srcdir/$file" "$websrc_builddir/$file"
632+
echo "htdocs: copied $file from '$websrc_srcdir' to '$websrc_builddir'"
633+
done
634+
echo "htdocs: copied prebuilt htdocs from '$websrc_srcdir' to '$websrc_builddir'"
635+
else
636+
echo "htdocs: no prebuilt htdocs found, nothing to prepare"
637+
fi
638+
else
639+
echo "htdocs: in-tree build, nothing to prepare ($websrc_srcdir = $websrc_builddir)"
640+
fi
641+
fi
642+
], [
643+
files="$HTDOCS_FILES"
644+
enable_webinterface="$enable_webinterface"
645+
])
646+
417647
AC_OUTPUT

src/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ EXTRA_DIST = \
155155
# Rule for generating lexer headers. $@ is an automatic variable that is equal
156156
# to the particular target name, so a header file name.
157157
$(LEXER_SRC:.l=.h): $(LEXER_SRC)
158-
$(LEX) --header-file=$@ --stdout $(@:.h=.l) > /dev/null
158+
$(LEX) --header-file=$@ --stdout $(srcdir)/$(@:.h=.l) > /dev/null
159159

160160
# Anything built by make should be cleaned by make clean, but when it comes to
161161
# flex/bison automake's support leaves something to be desired

0 commit comments

Comments
 (0)